Подтвердить что ты не робот

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... Как я могу это исправить?

4b9b3361

Ответ 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