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

Git: не удается нажать (ошибка при распаковке), связанная с проблемами разрешения

У меня есть эта проблема, когда я пытаюсь нажать 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>'

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

chmod -R g+w *

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

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

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

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

Здесь моя конфигурация repo выглядит как atm:

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

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

4b9b3361

Ответ 1

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

chmod -Rf u+w /path/to/git/repo/objects

Ответ 2

У меня была эта ошибка в течение двух недель, и большинство решений заявили "chmod -R" в качестве ответа, к сожалению, для меня мои репозитории git (локальные/удаленные/совместно используемые с командой) были в Windows OS, и хотя chmod -Rv показал все файлы, измененные на "rwxrwxrwx", последующий "ls -l" все еще показывал все файлы как "rwxr-xr-x", и ошибка повторялась сама. В итоге я увидел это решение от Ariejan de Vroom. Это сработало, и мы все смогли снова и снова тянуть.

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

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

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

Ответ 4

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

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

Он просто работает.

Ответ 5

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

Ответ 6

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

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

error: file write error (No space left on device)
fatal: unable to write sha1 file
error: unpack failed: unpack-objects abnormal exit

Ответ 7

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

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

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

Несмотря на ошибку "unpack failed", выяснилось, что проблема была локальной.

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

Voila! Это сработало!

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

Для меня это проблема с разрешениями:

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

sudo chmod -R 777 theDirectory/

Ответ 11

Я получал схожую ошибку, и, пожалуйста, см. ниже, как я ее разрешил.

Моя структура каталогов: /opt/ git/project.git  и git пользователь git

$ cd /opt/git/project.git
$ sudo chown -R git:git .

chown с параметром -R рекурсивно изменяет право собственности и группу (так как я напечатал git: git в приведенной выше команде) текущего каталога. chown -R необходимо, так как git изменяет многие файлы внутри вашего каталога git, когда вы нажимаете на репозиторий.

Ответ 12

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

  • Установите 'sharedRepository = true' в разделе конфигурационного файла [core].
  • Измените идентификатор группы в репозитории на группу, общую для всех пользователей, которым разрешено нажать на нее:

    chgrp -R shared_group /git/our_repos
    chmod -R g+w /git/our_repos
    
  • Установите бит setgid во всех каталогах в репозитории, чтобы новые файлы/каталоги сохраняли одну и ту же группу:

    find /git/our_repos -type d -exec chmod g+s {} +
    
  • Добавьте эту строку в крюк pre-receive в репозитории, чтобы гарантировать, что новые разрешения на файл позволяют группе читать/писать:

    umask 007