Ошибка Git push: невозможно отменить связь со старым (в разрешении отказано)

На удаленном сервере у меня настроен перехватчик post-receive, чтобы произвести проверку моего репозитория с помощью git:

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

Но когда я нажимаю со своего локального компьютера в репозиторий git на сервере, я получаю следующие сообщения об ошибках:

remote: error: unable to unlink old '<file>' (Permission denied)

Это появляется много раз, одно сообщение об ошибке почти для каждого файла.

Однако у меня есть файл README.txt, который я могу изменить с помощью git, вот его разрешения:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

Но другие файлы с тем же владельцем и такими же разрешениями дают мне эту ошибку.

В другом локальном репозитории для другого веб-сайта у меня есть файлы с моим именем пользователя на локальном компьютере в качестве владельца, и когда я нажимаю на удаленный сервер, он уважает владельца удаленного сервера файлов и работает как шарм.

Очевидно, это похоже на ошибку, связанную с разрешениями, но я не могу найти способ ее исправить, какие-либо предложения?


person rfc1484    schedule 02.08.2012    source источник


Ответы (14)


Когда вам нужно отменить связь с файлом, у вас должно быть разрешение 'w' для каталога, в котором находится файл, а не для файла ...

person Jan Marek    schedule 02.08.2012
comment
На самом деле это была проблема, я исправил ее, используя sudo chmod -R g+w поверх виновных папок. - person rfc1484; 02.08.2012
comment
OMG спасибо. Был так раздражен, думая, что права доступа к файлу были правильными. Имеет смысл, что обновления на самом деле больше похожи на mv действия, чем просто на перезапись. - person doublejosh; 24.11.2012
comment
Изменение разрешений на каталог сработало для меня (спасибо!), Но это странно, потому что я мог вручную перезаписать файлы, о которых идет речь, через sftp без каких-либо проблем. Странно, что когда git попытался сделать то же самое, он не смог. - person Jonathan Stark; 30.07.2014
comment
Также имейте в виду, что если у вас все еще открыт файл, эта ошибка также появится. Была та же ошибка, поэтому я не смог внести свои изменения. - person Matias; 03.11.2016
comment
что такое g + w? @ rfc1484 - person Fai Zal Dong; 16.11.2016
comment
Первый символ дисплея ls -l указывает тип файла и не имеет отношения к разрешениям. Остальные девять символов представлены тремя наборами, каждый из которых представляет класс разрешений в виде трех символов. Первый набор представляет класс пользователя. Второй набор представляет собой групповой класс. Третий набор представляет другой класс. g+w в chmod дает набору групп (параметр g) разрешение на запись (параметр w) - person rfc1484; 04.12.2016
comment
В дополнение к разрешению w для каталога, пользователь должен владеть или принадлежать к группе, которая имеет доступ к этому каталогу. - person Lukasz Dynowski; 06.04.2018
comment
В окнах снимите флажок Атрибуты файлов только для чтения. - person Hessam J.E; 01.09.2019
comment
для меня я использую это: find . -type d -exec chmod 775 {} \; - person ddwolf; 08.05.2020
comment
В моем случае пришлось запустить sudo chgrp <group name> <offending folder name> - person fungusanthrax; 23.06.2021

sudo chmod -R ug+w .;

Эта команда устранит проблему. Он дает права на запись в папку.

person Rajendra kumar Vankadari    schedule 04.01.2016

Если вы используете любую IDE, скорее всего, проблема в том, что файл использовался каким-то процессом. Как будто ваш кот может использовать файл. Попытайтесь определить этот конкретный процесс и закрыть его. Это должно решить вашу проблему.

person Rama Krishna Gollapudi    schedule 16.10.2015

Я думаю, что проблема может быть в праве собственности на папку, поэтому установите для нее текущее владение пользователем.

sudo chown -R your_login_name /path/to/folder
You can find the solution [here][1]
person Soumitra Sarkar    schedule 29.10.2017

У меня была такая же проблема, и ни одно из вышеперечисленных решений не помогло мне. Я удалил проблемную папку. Потом:

git reset --hard

Удалил все устаревшие файлы, чтобы очистить статус git, затем сделал:

git pull

Наконец-то это сработало.

ПРИМЕЧАНИЕ. Если папка была, например, общей папкой с файлами сборки, не забудьте пересобрать файлы.

person wcyn    schedule 16.01.2018
comment
Спасибо, у меня тоже ничего не работало, удаление казалось единственным вариантом. - person math0ne; 05.02.2018
comment
В моем случае эта оскорбительная папка .git - person Tushar Kathuria; 10.04.2019

FWIW - у меня была аналогичная проблема, и я не уверен, что это облегчило ее (помимо мода разрешения): закрытие Eclipse, который использовал ветку с этой проблемой.

person cellepo    schedule 15.11.2014
comment
Точно так же я получил эту ошибку, когда CSV-файл с контролируемой версией был открыт в Excel. Простое закрытие Excel решило эту проблему. Это, вероятно, верно и для других приложений в Windows и, вероятно, зависит от того, как программа отмечает файл как открытый во время редактирования. - person Carel; 15.02.2019
comment
спасибо, закрытие затмения сработало для меня - person Akhilesh; 01.07.2021

sudo chown -R $USER:$USER .

Сделал для меня работу.

person BARJ    schedule 09.04.2020
comment
Это помогло мне, спасибо - person punjabi4life; 07.12.2020

Это старый вопрос, но он может помочь пользователям Mac.

Если вы копируете файлы из Time Machine вручную, вместо того, чтобы восстанавливать их через Time Machine, он добавит ACL ко всему, что может испортить ваши разрешения.

Например, раздел этой статьи, говорит «Как исправить разрешения для файлов Mac OS X» показывает, что «у всех» есть собственные разрешения, что все портит:

Неверные разрешения от http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

Вам необходимо удалить ACL из этих каталогов / файлов. Этот ответ суперпользователя входит в него, но вот команда:

sudo chmod -RN .

Затем вы можете убедиться, что ваши каталоги и файлы имеют соответствующие разрешения. Я использую 750 для каталогов и 644 для файлов.

person kylesimmonds    schedule 11.05.2016
comment
Замечательный ответ. Я искал именно это для проблемы Mac ACL, когда файлы копируются вручную. - person Ankit Bhatnagar; 22.09.2020
comment
Помимо прав доступа к файлам и списков ACL, в macOS также есть блокировки. Блокировки могут применяться при копировании файлов с USB-накопителя. Их можно рекурсивно разблокировать с помощью chflags -R nouchg /path/, как описано на странице superuser.com/a/40754/199930, и найти с помощью find . -type f -flags +uchg , как описано по адресу: coderwall.com/p/-3hwvg / find-locked-files-in-osx-terminal - person Ioannis Filippidis; 13.05.2021

git reset --hard

Работал на меня

person kreker    schedule 24.10.2017
comment
Это может быть немного экстремальным, поскольку он делает гораздо больше. - person cdaddr; 15.03.2018

Я получаю эту ошибку и другие странные ошибки git, когда у меня работает сервер (в Intellij). Остановка сервера и повторная попытка команды git часто исправляют это для меня.

person Phil Carter    schedule 28.07.2017

Вытягивание могло вызвать локальные изменения.

Добавьте неотслеживаемый файл:

git add.

Изменения в тайнике.

мерзавец

Отбросьте локальные изменения.

git stash drop

Вытяните с разрешением sudo

sudo git pull удаленная ветка

person user2858738    schedule 13.05.2019
comment
все дело в разрешении локальных файлов, здесь нет ничего общего с git Я только что запустил команду с sudo, и она сработала, поэтому не потребовались все эти шаги - person raviramani; 27.09.2019

Некоторые файлы защищены от записи, поэтому даже git не может их перезаписать. Измените разрешение папки, чтобы разрешить запись, например sudo chmod 775 имя папки

А затем выполнить

git pull 

опять таки

person Carmela    schedule 09.03.2018

Также не забудьте проверить разрешение самого корневого каталога!

Вы можете найти:

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

и появится сообщение об ошибке «Отказано в разрешении».

person cadavre    schedule 08.08.2016

После проверки разрешения папки все в порядке с 744. У меня возникла проблема с плагином, установленным на моем сайте WordPress. Плагин подключил тех, кто занимается кукурузой, как я подозревал.

С простым sudo it can fix the issue

sudo git pull origin master

У вас это работает.

person pensebien    schedule 06.09.2020