Ошибка Git: невозможно добавить в .git / logs / refs / remotes / origin / master: разрешение отклонено - PullRequest
69 голосов
/ 15 апреля 2010

У меня странная проблема, которую я не могу решить. Вот что случилось:

У меня было несколько файлов журнала в репозитории 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

EDIT

$ sudo chgrp {user} .git/logs/refs/remotes/origin/master
$ sudo chown {user} .git/logs/refs/remotes/origin/master
$ git push
Everything up-to-date

Спасибо!

EDIT

Э-э-э Проблема. Я работал над этим проектом всю ночь и просто пошел вносить свои изменения:

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

Hooray. Я прыгаю на http://GitHub.com и проверяю репозиторий, и мой последний коммит не найден. :: царапина голову :: Так что я снова нажимаю:

Everything up-to-date

Хмм ... это не похоже на это. У меня никогда не было этой проблемы раньше, это могло быть проблемой с github? или я что-то напутал с моим проектом git?

EDIT

Неважно, я сделал простое:

git push origin master

и толкнул нормально.

Ответы [ 5 ]

179 голосов
/ 15 апреля 2010

Похоже, что вы запустили git как root локально, таким образом меняя владельца некоторых файлов, отслеживающих местоположение ветви origin.

Исправьте владение файлом, и у вас все будет в порядке:

# run this from the root of the git working tree
sudo chown -R "${USER:-$(id -un)}" .
2 голосов
/ 14 февраля 2018

Давайте сконцентрируемся на том, на что именно жалуются:

В доступе отказано в разрешении: невозможно обновить ссылку 'Ссылки / пультов ДУ / происхождение / мастер'.

Перед рекурсивным изменением мода / владельца перейдите к этому файлу и исправьте все неправильные разрешения.

Я думаю, что я вызвал эту проблему, создав ветку в то время, когда я был root, а затем попытался связываться с этой веткой в ​​качестве моего пользователя.

2 голосов
/ 15 ноября 2016

В моем случае я создал файлы с правами root локально и попытался отправить код на удаленный доступ с локальными разрешениями. Итак, я выполнил эту команду

$find . -user root

чтобы узнать, что все файлы имеют "root" в качестве владельца. И затем я изменил владельца для всех файлов, которые находятся под root на локальный, используя следующую команду

$sudo chown parineethat `find . -user root`

Тогда я смог передать свой код с локального на удаленный.

0 голосов
/ 10 мая 2019

Это рекурсивно изменит все ваши .git файлы и каталоги (от root до 1000) и даст вам полный список всех изменений, внесенных в терминале.

sudo chown -Rc $ UID .git /

0 голосов
/ 24 июля 2015

Пожалуйста, сначала дайте разрешения от учетной записи root, как показано ниже

chmod -R 777 foldername

после этого выполните команду commit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...