Ошибка Git: невозможно добавить в.git/logs/refs/remotes/origin/master: разрешение отклонено
У меня странная проблема, которую я не могу решить. Вот что произошло:
У меня были некоторые файлы журналов в репозитории 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
и это толкнуло нормально.
10 ответов
Похоже, что вы запустили git как root локально, таким образом меняя владельца некоторых файлов, отслеживающих местоположение origin
ветка.
Исправьте владение файлом, и у вас все будет хорошо:
# run this from the root of the git working tree
sudo chown -R "${USER:-$(id -un)}" .
Давайте сосредоточимся на том, на что именно они жалуются:
Ошибка отказа в разрешении: невозможно обновить ссылку 'refs/remotes/origin/master'.
Прежде чем делать рекурсивные изменения мода / владельца, пройдите к этому файлу и исправьте все неправильные разрешения.
Я думаю, что я вызвал эту проблему, создав ветку в то время, когда я был пользователем root, а затем пытался связываться с этой веткой как мой пользователь.
вы можете просто сделать:
sudo chown -R <username> <folder>
замените «имя пользователя» на пользователя, которому вы хотите предоставить доступ, а «папку» - на путь к папке относительно того, откуда вы выполняете эту команду.
Это скорее общее решение проблем с разрешениями, но я думаю, что это должно помочь.
В моем случае я создал файлы с правами root локально и попытался передать код удаленно с локальными разрешениями. Итак, я запустил эту команду
$find . -user root
выяснить, какие файлы имеют "root" в качестве владельца. И затем я изменил владельца для всех файлов, которые находятся под root на локальный, с помощью следующей команды
$sudo chown parineethat `find . -user root`
Затем я смог передать свой код с локального на удаленный.
Это рекурсивно изменит все ваши файлы.git и каталоги (от root до 1000) и предоставит вам полный список всех изменений, сделанных в терминале.
sudo chown -Rc $UID.git /
Попробуйте остановить все процессы git.
Смотрите их:
ps aux | grep git
Убийство:
kill git
Я попытался исправить право собственности на Git, но это все еще не работает.
Но мне удалось это исправить, создав локальную ветку с другим именем и удалив ее.
Затем я снова проверяю то же имя ветки, и оно работает.
TL; DR;
Я не могу проверить `staging/rc'.
Итак, я оформляю заказ, используя staging
вместо этого удаленный указывает на `staging/rc'.
И я удаляю его и снова оформляю заказ. Но на этот раз я используюstaging/rc
как название моего местного филиала.
Это работает, и я понятия не имею, почему.
Я использовал визуальный редактор для Git ( SourceTree ) в Windows . Основываясь на других ответах, я понял, что мне нужно всегда открывать его в режиме администратора, и это решило мою проблему:
Как уже указывалось, это связано с неправильной настройкой группы или пользователя.
Я хочу добавить информацию о том, что следующая команда не работает для скрытых папок:
chown -R user:group *
Если вы используете
*
тогда это не удастся, вы должны вместо этого установить абсолютный путь к папке, например:
chown -R user:group /srv/www/vhost/project/
Пожалуйста, сначала дайте разрешения от root
аккаунт как ниже
chmod -R 777 foldername
после этого выполните команду commit