Git ошибка "не удалось записать имя файла sha1... Разрешение отклонено"
Я использую git для окон. Это то, что я сделал: делая разработку на машине M1, создал голый репозиторий на USB-накопителе M2 для резервного копирования репозитория на M1. Я сделал резервные копии с помощью этой команды (от git bash на M1):
git push --mirror "f:\repo"
Работал без каких-либо проблем.
Затем я купил новую машину M3. Я клонировал репозиторий от M2 до M3:
git clone "f:\repo" .
Сделал несколько проверок для репо в M3. Затем я сделал (от git bash на машине M3)
git push --mirror "f:\repo"
Я получаю эту ошибку:
не удалось написать имя файла sha1...
Как я могу это исправить?
Ответы
Ответ 1
Даже если речь идет о другом контексте (git + ssh), проверьте ACL, связанный с вашим репо.
См. Например, сообщение в блоге.
Как было предложено в вопросе SO "Git ошибка при перемещении: невозможно создать временное имя файла sha1" (у которого есть и другие интересные предложения), попробуйте переделать свой голый репо, на этот раз с конфигурацией:
git config core.sharedRepository true
Ответ 2
Столкнулся с этой ошибкой из-за прав доступа к удаленному репозиторию. В моем случае это был пользователь ssh, который был не прав.
Ответ 3
Немного поздно, но ничего из этого не помогло мне. Мне пришлось запустить sudo git gc
в удаленном хранилище, и это как-то решило все мои проблемы.
После этого я снова нажал, и это сработало
Ответ 4
Я тоже получаю ту же ошибку, но обычно при выполнении "git pull" с помощью bash на машине Windows.
Для меня это связано с каким-то другим приложением (обычно это проверка на вирусы в моем случае), вызывающим конфликты, удерживая его в каталоге .git.
Обычно я могу "git тянуть" еще несколько раз, и в конечном итоге он будет работать (после отказа с тем же разрешением отклонить ошибку на другое значение хэш-функции), или если я буду торопиться, я остановил бы проверите git pull (который будет работать с первого раза без ошибки разрешения), а затем очень быстро переключит проверку на вирусы снова.
Ответ 5
У меня была эта проблема в течение 2 дней, и я, наконец, нашел способ ее решить. Ошибка возникает из-за того, что ветка (в удаленном репозитории), которую вы действительно хотите вставить, в настоящее время извлечена. При применении опции --mirror
или --all
, по крайней мере, ветвь извлекается, поэтому в разрешении отказано.
Так что просто переключитесь на другую ветку на пульте и примените push
локально, и на этот раз он будет работать.
Ответ 6
Мои конкретные сообщения об ошибках:
error: unable to write sha1 filename ./objects/ee/7ed0ef8db273d8d0acef46f3cc8ad0ae140d50: Permission denied
Я только что исправил свою проблему. Оказалось, проблема с хранилищем.
В /GIT/HOME/projectdir/objects/
выполнив ls, вы должны увидеть множество каталогов с двумя буквами:
00 0a 14 1e 28 32 3c 46 50 5a 64 6e 78 82 8c 96 a0 aa b4 be c8 d2 dc e6 f0 fa
01 0b 15 1f 29 33 3d 47 51 5b 65 6f 79 83 8d 97 a1 ab b5 bf c9 d3 dd e7 f1 fb
02 0c 16 20 2a 34 3e 48 52 5c 66 70 7a 84 8e 98 a2 ac b6 c0 ca d4 de e8 f2 fc
03 0d 17 21 2b 35 3f 49 53 5d 67 71 7b 85 8f 99 a3 ad b7 c1 cb d5 df e9 f3 fd
04 0e 18 22 2c 36 40 4a 54 5e 68 72 7c 86 90 9a a4 ae b8 ... (many others removed) info pack
Здесь я просто перечислю несколько примеров (например, один из них вызывает сообщение об ошибке). ls -l покажет, что некоторые каталоги получили -r разрешение только на чтение. используя учетную запись git do chmod -r + w в тех каталогах, в которых отсутствует метка w, я решил мою проблему. В моем случае несколько каталогов, включая 'ee', пропустили разрешение на запись.
Ответ 7
У меня была эта же проблема, и я смог ее исправить, перейдя в C:\Program Files\Git
, затем щелкните правой кнопкой мыши по git-bash.exe
→ свойствам → Совместимость → Запустите эту программу в качестве администратора.
Ответ 8
Мы столкнулись с этой проблемой, когда у коллеги не было правильного параметра umask
в его .bashrc
, из-за которого все файлы, которые он установил, были установлены как прочитанные только для остальных из нас, пытающихся записать изменения в тот же файл в git repo
. Вот ссылка объясняющая разрешения umask