git: не могу отправить (ошибка распаковщика), связанные с проблемами с правами доступа - PullRequest
52 голосов
/ 26 октября 2010

У меня возникает эта проблема, когда я пытаюсь вставить git:

error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://<repo url>/<repo dir>
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'ssh://<repo url>/<repo dir>'

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

chmod -R g+w *

Это никогда не было удовлетворительным решением, и теперь оно укусило нас в задницу, так как один из парней отсутствует, и никто не знает пароль пользователя его репо. Итак, я пытаюсь решить это правильно.

Похоже, ошибка возникает, когда кто-то пытается нажать на изменение, которое изменит каталог репо, принадлежащий другому пользователю (следовательно, установка параметра записи группы выше). Я немного погуглил и нашел пару обсуждаемых решений (ни одно из которых не помогло мне)

1) убедитесь, что группа, с которой размещаются папки репо, является основной группой каждого пользователя (я полагаю, что это уже так: каждый пользователь имеет только одну группу, так что должна быть их основной группой, верно?) 1011 *

2) Настройка git repo core.sharedRepository, как подробно описано здесь: Git: Не удается отправить с одного компьютера Я изменил это, но это не имело никакого значения. Нужно ли перезагружать конфигурацию или что-то еще, чтобы действительно внести изменения?

Вот как выглядит мой репозиторий atm:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = all
[receive]
        denyNonFastForwards = True

Благодарен за любые советы и предложения! макс

Ответы [ 13 ]

26 голосов
/ 25 января 2011

Более простой способ сделать это - добавить скрипт post-receive, который запускает команду chmod после каждого нажатия на репозиторий 'hub' на сервере. Добавьте следующую строку в hooks / post-receive внутри вашей папки git на сервере:

chmod -Rf u+w /path/to/git/repo/objects
20 голосов
/ 13 августа 2013

У меня была эта ошибка в течение двух недель, и в большинстве решений ответом был chmod -R, к сожалению для меня все мои репозитории git (local / remote / shared-with team) были в ОС Windows, и хотя chmod -Rv показывал все файлы, измененные на «rwxrwxrwx», последующий «ls -l» по-прежнему отображал все файлы как «rwxr-xr-x», и ошибка повторялась. В конце концов я увидел это решение от Арьеян де Врум. Это сработало, и мы все смогли тянуть и толкать снова.

На локальных (локальных, которые испытывают затруднения при отправке) и удаленных репозиториях выполните следующие команды:

$ git fsck
$ git prune
$ git repack
$ git fsck

Кстати, я попытался использовать собственные права доступа к файлам / ACL для Windows и даже обратился к поднятию проблемного пользователя до администратора, но, похоже, ничего из этого не помогло. Не уверен, что среда важна, но она может помочь кому-то с подобной настройкой - проблемный член команды и удаленный (Windows Server 2008 R2 Standard) мой локальный (Windows 7 VM).

8 голосов
/ 18 сентября 2012

Это ошибка разрешения. Для меня наиболее подходящим и безопасным способом было добавление пользователей в дополнительную группу , в которую входит репо. принадлежит (или наоборот):

groupadd git
chgrp -R git .git
chgrp -R git ./
usermod -G -a git $(whoami)
6 голосов
/ 05 сентября 2012

В случае, если кто-то еще застрял с этим: это просто означает запись разрешения в репо, на который вы нажимаете, неверны. Иди и чмод -R, чтобы у пользователя, к которому вы обращаетесь к git-серверу, был доступ на запись.

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

Это просто работает.

3 голосов
/ 11 мая 2016

Для меня эта ошибка произошла, когда на моем пульте не было свободного места.

Мне просто нужно прочитать оставшуюся часть сообщения об ошибке:

error: file write error (No space left on device)
fatal: unable to write sha1 file
error: unpack failed: unpack-objects abnormal exit
3 голосов
/ 26 октября 2010

Я использую Gitosis для управления такого рода вещами.У Gitosis есть один пользователь (обычно называемый «git»), которому принадлежат все репозитории, и он использует управление доступом на основе открытого ключа к каждому репо.Возможно, он не подходит под ваши настройки, но, вероятно, стоит проверить (не каламбур).

2 голосов
/ 27 июня 2018

В случае ошибки разрешения с использованием репозитория git в экземпляре AWS я успешно решил ее, создав группу и назначив ее рекурсивно (-R) в папку репозитория, и предоставив письменное право этой группе, а затемназначьте этой группе пользователя экземпляра aws по умолчанию (ec2-user или ubuntu).

1.Создайте имя группы share_group или что-то еще

     sudo groupadd share_group

2.измените папку репозитория из группы «root» на «share_group»

     sudo chgrp -R share_group /path/to/your/repository

3.добавить полномочия записи в share_group

     sudo chmod -R g+w /path/to/your/repository

4.Последний шаг - назначить текущего пользователя - пользователя по умолчанию при входе в систему (по умолчанию ec2 - «ec2-пользователь», пользователь экземпляра ubuntu - «ubuntu» в ubuntu на aws) для share_group.Я использую Ubuntu Insance на AWS, поэтому мой пользователь по умолчанию - Ubuntu.

     sudo usermod -a -G share_group ubuntu

Кстати, чтобы увидеть владельца папки или файла, просто введите:

    ls -l  /path/to/your/repository

'

Выход:

    drwxr-x--x  2 root shared_group
(объяснение см .: https://wiki.archlinux.org/index.php/File_permissions_and_attributes).

После шага 3 вы увидите

    drwx--x--x  2 root root

изменено на

    drwxr-x--x  2 root share_group 

В этом случае я не назначил пользователя 'ubuntu' для корневой группы, из соображений безопасности. Вы можете просто попытаться назначить пользователя по умолчанию для пользователя root согласно шагу4 (просто пропустите первые 3 шага


По-другому, попробуйте решение по:

    chmod -Rf u+w /path/to/git/repo/objects
Это не сработало для меня, я думаю, это должно быть причиной того, что моя папка репозиторияпринадлежат пользователю root, а не пользователю Ubuntu, и по умолчанию в 'git' используется пользователь по умолчанию (ec2-пользователь или пользователь Ubuntu. Вы можете попытаться изменить пользователя и проверить его.

Наконец, код нижеопределенно работает для меня, но 777 не годится для безопасности

    sudo chmod -R 777 /path/to/your/repo
1 голос
/ 22 декабря 2014

Несмотря на это, у меня возникла та же проблема с моим собственным VPS, и это было вызвано тем, что на VPS осталось мало свободного места. Подтверждено командой df -h и после очистки жесткого диска моего VPS; проблема исчезла.

Приветствие.

1 голос
/ 24 января 2013

Эта проблема также может возникать после обновлений Ubuntu, требующих перезагрузки.

Если файл /var/run/reboot-required существует, выполните или запланируйте перезагрузку.

1 голос
/ 20 апреля 2011

У меня тоже были проблемы с этим, думая, что мой удаленный администратор gitolite был поврежден или что-то не так.

Моя установка - ноутбук Mac OS X (10.6.6) с удаленным сервером Ubuntu 10 с gitolite.

Оказалось, что проблема была в моей локальной проверкеgitolite-администратора.

Несмотря на ошибку «распаковка не удалась», оказалось, что проблема была локальной.

Я понял это, снова проверив это как gitolite-admin2, внеся изменения и нажав,

Вуаля!Это сработало!

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