Ошибка при отправке на GitHub - недостаточно прав для добавления объекта в базу данных хранилища. - PullRequest
126 голосов
/ 17 декабря 2009

Я получаю необычную ошибку при попытке выполнить "git push" для моего репозитория GitHub:

Counting objects: 8, done.
Delta compression using 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 1.37 KiB, done.
Total 5 (delta 2), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack-objects exited with error code 128
error: unpack failed: unpack-objects abnormal exit
To git@github.com:bixo/bixo.git
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'git@github.com:bixo/bixo.git'
  • После чистого клона из GitHub я могу редактировать / добавлять / фиксировать / отправлять измененный файл.
  • Если я тогда повторю это во второй раз, я получу вышеуказанную ошибку.
  • Я могу просто отправлять в другие репозитории GitHub.
  • Я проверил права доступа к файлам / каталогам на моей стороне, и они кажутся в порядке.
  • Я использую git 1.6.2.3 на Mac OS X 10.5.8

Приведенный выше репозиторий был источником моего удовольствия для предыдущего вопроса переполнения стека ( SO 1904860 ), поэтому, возможно, репозиторий GitHub поврежден. Единственная похожая проблема, которую я обнаружил при поиске, была ошибка распаковки проблема, о которой сообщалось на github. Кто-нибудь еще сталкивался с этой проблемой прежде, особенно когда не с использованием GitHub?

Ответы [ 21 ]

209 голосов
/ 27 июня 2011

Когда вы видите эту ошибку вне github, вот исправление.

Получил это от: http://mapopa.blogspot.com/2009/10/git-insufficient-permission-for-adding.html

ssh me@myserver
cd repository/.git

sudo chmod -R g+ws *
sudo chgrp -R mygroup *

git config core.sharedRepository true

После этого демон git должен использовать права доступа к файлу группы при записи в .git / objects.

55 голосов
/ 10 сентября 2010

Обычно эта проблема вызвана неправильными правами пользователей и групп в файловой системе Git-серверов. Хранилище git должно принадлежать как пользователю, так и его группе.

Пример:

Если ваш пользователь называется «git», его группа «gitgroup» и местоположение репозитория Git: git@mygitserverxyz.com: путь / к / repo.git

затем сделайте:

sudo chown -R git:gitgroup path/to/repo.git/

Это исправило ошибку недостаточного разрешения git для меня.

34 голосов
/ 04 сентября 2014
sudo chmod 777 -R .git/objects
10 голосов
/ 16 июня 2016

Это случилось со мной, когда я попытался git pull. Некоторый анализ показал, что кто-то связывался с root в прошлом, тем самым создавая некоторые объекты с владением root в .git/objects.

Итак, я побежал

cd <repo>
la .git/objects/

и это показывало root владение некоторыми объектами (каталогами), например:

user@host:/repo> la .git/objects/
total 540
drwxr-xr-x 135 user user 4096 Jun 16 16:29 .
drwxr-xr-x   8 user user 4096 Jun 16 16:33 ..
drwxr-xr-x   2 user user 4096 Mar  1 17:28 01
drwxr-xr-x   2 user user 4096 Mar  1 17:28 02
drwxr-xr-x   2 user user 4096 Jun 16 16:27 03
drwxr-xr-x   2 user user 4096 Mar  3 13:22 04
drwxr-xr-x   2 root root 4096 Jun 16 16:29 05
drwxr-xr-x   2 user user 4096 Jun 16 16:28 07
drwxr-xr-x   2 root root 4096 Jun 16 16:29 08

Тогда я побежал

sudo chown -R user:user .git/objects/

и это сработало!

Я заменял пользователя моим реальным пользователем, конечно.

4 голосов
/ 10 марта 2013

Ничего из вышеперечисленного не помогло мне. Через пару часов я нашел причину проблемы: Я использовал URL репо типа

ssh://git@example.com/~git/repo.git

К сожалению, я сохранил сеанс замазки с именем example.com, который был настроен для входа в систему как пользователь myOtherUser.

Итак, хотя я думал, что git подключается к хосту example.com с пользователем 'git', Git / TortoiseGit подключился к сеансу замазки example.com, который использует пользователя myOtherUser. Это приводит к точно такой же ошибке ..insufficient permission.. (поскольку оба пользователя находятся в разных группах).

Решение: переименовать сеанс замазки example.com в myOtherUse@example.com

4 голосов
/ 25 октября 2011

chmod должен быть chown, поэтому правильная строка:

sudo chown -R gituser:gituser objects
3 голосов
/ 31 июля 2014

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

Чтобы избежать такой проблемы, убедитесь, что при инициализации вашего git-репозитория используйте команду "git init --shared = group".

3 голосов
/ 31 июля 2012

Как ни странно, у меня была эта проблема с одним клоном репо, но не с другим. Помимо повторного клонирования репо (что коллега сделал, чтобы успешно обойти эту проблему), мне удалось выполнить «git reset» для коммита, который был у меня до начала сбоев. Затем я повторно зафиксировал изменения, и после этого мне удалось успешно продвинуться. Таким образом, несмотря на все признаки, на сервере возникла проблема, в данном случае это явно указывало на некоторую странность в локальном репо.

2 голосов
/ 31 января 2012

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

Мы исправили это, установив umask пользователей SSH на 002 с соответствующей группой, общей для всех пользователей.

например.

umask 002

где середина 0 разрешает групповую запись по умолчанию.

2 голосов
/ 14 февраля 2014

После того, как вы добавите некоторые вещи ... зафиксируйте их и после того, как закончите, нажмите на них BANG !! Начните все проблемы ... Как вы должны заметить, существуют некоторые различия в способах определения как новых, так и существующих проектов. Если какой-то другой человек попытается добавить / зафиксировать / отправить те же файлы или содержимое (git сохранит оба одинаковых объекта), мы столкнемся со следующей ошибкой:

$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects  remote: fatal: failed to write object

Чтобы решить эту проблему, вы должны иметь в виду систему разрешений операционной системы, так как в этом случае вы ограничены ею. Чтобы лучше понять проблему, проверьте папку вашего git-объекта (.git / objects). Вы, вероятно, увидите что-то подобное:

<your user_name>@<the machine name> objects]$ ls -la
total 200
drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 .
drwxr-xr-x  3 <his user_name> <group_name> 1024 Feb  3 15:06 ..
drwxr-xr-x  2 <his user_name> <group_name> 1024 Jan 31 13:39 02
drwxr-xr-x  2 <his user_name> <group_name> 1024 Feb  3 13:24 08

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

Level       u   g   o
Permission rwx r-x ---
Binary     111 101 000
Octal       7   5   0

РЕШЕНИЕ ПРОБЛЕМЫ

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

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

Теперь вам и всем пользователям-владельцам файлов придется изменить разрешение на эти файлы, выполнив:

$ chmod -R 774 .

После этого вам нужно будет добавить новое свойство, которое эквивалентно --shared = group, выполненному для нового репозитория, в соответствии с документацией, это делает репозиторий доступным для записи в группу, выполнив его:

$ git config core.sharedRepository group

https://coderwall.com/p/8b3ksg

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