У меня странная проблема, которую я не могу решить. Вот что случилось:
У меня были файлы журналов в репозитории github, которые мне там не нужны. Я нашел этот скрипт, который полностью удаляет файлы из истории git, например:
#!/bin/bash
set -o errexit
# Author: David Underhill
# Script to permanently delete files/folders from your git repository. To use
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2
if [ $# -eq 0 ]; then
exit 0are still
fi
# make sure we're at the root of git repo
if [ ! -d .git ]; then
echo "Error: must run this script from the root of a git repository"
exit 1
fi
# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD
# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
Я, конечно, сначала сделал резервную копию, а потом попробовал. Казалось, все работает нормально. Затем я сделал git push -f и получил следующие сообщения:
error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.
Кажется, что все прошло нормально, потому что файлы, похоже, исчезли из репозитория GitHub, если я попытаюсь нажать еще раз, я получу то же самое:
error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.
Everything up-to-date
РЕДАКТИРОВАТЬ
$ sudo chgrp {user} .git/logs/refs/remotes/origin/master
$ sudo chown {user} .git/logs/refs/remotes/origin/master
$ git push
Everything up-to-date
Благодарность!
РЕДАКТИРОВАТЬ
Ух Ой. Проблема. Я работал над этим проектом всю ночь и просто пошел фиксировать свои изменения:
error: Unable to append to .git/logs/refs/heads/master: Permission denied
fatal: cannot update HEAD ref
Так что я:
sudo chown {user} .git/logs/refs/heads/master
sudo chgrp {user} .git/logs/refs/heads/master
Я пытаюсь выполнить коммит еще раз и получаю:
error: Unable to append to .git/logs/HEAD: Permission denied
fatal: cannot update HEAD ref
Так что я:
sudo chown {user} .git/logs/HEAD
sudo chgrp {user} .git/logs/HEAD
А потом снова пытаюсь выполнить коммит:
16 files changed, 499 insertions(+), 284 deletions(-)
create mode 100644 logs/DBerrors.xsl
delete mode 100644 logs/emptyPHPerrors.php
create mode 100644 logs/trimXMLerrors.php
rewrite public/codeCore/Classes/php/DatabaseConnection.php (77%)
create mode 100644 public/codeSite/php/init.php
$ git push
Counting objects: 49, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (27/27), done.
Writing objects: 100% (27/27), 7.72 KiB, done.
Total 27 (delta 15), reused 0 (delta 0)
To git@github.com:IAmCorbin/MooKit.git
59da24e..68b6397 master -> master
Ура. Я захожу на http://GitHub.com и проверяю репозиторий, а мою последнюю фиксацию нигде не найти. :: царапина :: я снова нажимаю:
Everything up-to-date
Эмм ... не похоже. У меня никогда раньше не было этой проблемы, может ли это быть проблемой с github? или я что-то испортил с моим проектом git?
РЕДАКТИРОВАТЬ
Да ладно, я сделал простое:
git push origin master
и толкнул нормально.
sudo chown -R "$USER" .
и не предполагать вменяемости. :)USER
не гарантируется pubs.opengroup.org/onlinepubs/009695399/utilities/… , поэтому его использование может быть безопаснее"$(id -un)"
.is not in the sudoers file. This incident will be reported.
- какие-нибудь советы о том, что я могу сделать? Спасибо."${var:-default}"
расширяется до значения переменной"$var"
, если это значение не пусто или не установлено, и в этом случае оно разрешается вdefault
. Таким образом, мы либо расширяемся до"$USER"
, либо вывод, генерируемый запускомid -un
.Сконцентрируемся на том, на что именно он жалуется:
Прежде чем выполнять рекурсивную смену мода / владельца, перейдите к этому файлу и исправьте все неверные разрешения.
Я думаю, что я вызвал эту проблему, создав ветку, когда был пользователем root, а затем попытался возиться с этой веткой как мой пользователь.
источник
В моем случае я создал файлы с правами root локально и попытался отправить код на удаленный компьютер с локальными разрешениями. Итак, я выполнил эту команду
чтобы узнать, у каких файлов есть "root" в качестве владельца. А затем я сменил владельца для всех файлов, находящихся под root, на локальный, используя следующую команду
Затем я смог перенести свой код с локального на удаленный.
источник
sudo chown parineethat `find . -user root`
ненадежно - не будет работать с именами файлов с пробелами. Вместо этогоsudo find . -user root -exec chown parineethat {} +
. См. Соответствующее обсуждение BashPitfalls # 1 .Это рекурсивно изменит все ваши файлы .git и каталоги (от root до 1000) и предоставит вам полный список всех изменений, сделанных в терминале.
источник
Я пытался исправить право собственности на Git, но это все равно не работает.
Но мне удалось это исправить, создав локальную ветку с другим именем и удалив ее.
Затем я снова проверяю то же имя ветки, и оно работает.
TL; DR;
Я не могу проверить `staging / rc '.
Итак, я проверяю, используя
staging
вместо этого, что пульт указывает на `staging / rc '.И я удаляю его и снова оформляю заказ. Но на этот раз я использую имя
staging/rc
своего местного филиала.Это работает, и я понятия не имею, почему.
источник
Пожалуйста, сначала предоставьте разрешения из
root
учетной записи, как показано нижепосле этого запустите команду фиксации
источник
chown -R root:user directory
: затемchmod -R 775 directory
(или770
, если другие учетные записи также не нуждаются в доступе для чтения).