Ошибка отправки в GitHub - недостаточно прав для добавления объекта в базу данных репозитория.

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

Подсчет объектов: 8, сделано.
Дельта-сжатие с использованием 2 потоков.
Сжатие объектов: 100% (4/4), сделано.
Написание объектов: 100% (5/5), 1,37 КиБ, сделано.
Всего 5 (дельта 2), повторно 0 (дельта 0)
ошибка: недостаточно прав для добавления объекта в базу данных хранилища./objects

фатальный: не удалось записать объект
ошибка: распаковка объектов завершена с кодом ошибки 128
ошибка: не удалось распаковать: аварийный выход из распакованного объекта
Для git@github.com:bixo/bixo.git! [удаленный отклоненный] мастер -> мастер (н / д (ошибка распаковщика))
ошибка: не удалось отправить некоторые ссылки на 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 ответ

Когда вы видите эту ошибку за пределами 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.

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

Пример:

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

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

sudo chown -R git: путь к gitgroup / to / repo.git /

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

sudo chmod 777 -R .git/objects

Это случилось со мной, когда я пытался 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/

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

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

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

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

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

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

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

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

sudo chown -R gituser:gituser objects

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

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

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

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

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

например

umask 002

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

 user@M063:/var/www/html/app/.git/objects$ sudo chmod 777 -R .git/objects
 user@M063:/var/www/html/app/.git/objects$ sudo chown -R user:user .git/objects/
sudo su root

chown -R user:group dir

Dir - это твое мерзавец.

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

git pull origin master

Вы увидите изменения в коммитах других.

Вы пробовали sudo git push -u origin --all? Иногда это единственное, что вам нужно, чтобы избежать этой проблемы. Он запрашивает у вас системный пароль администратора - тот, который вы можете использовать для входа в систему на своем компьютере, - и это то, что вам нужно нажать - или зафиксировать, если это так.

Попробуйте сделать следующее:

Перейти на ваш сервер

    cd rep.git
    chmod -R g+ws *
    chgrp -R git *
    git config core.sharedRepository true

Затем перейдите в свою рабочую копию (локальный репозиторий) и перепакуйте ее git repack master

Работает отлично для меня.

Вы можете использовать это

sudo chown -R $USER:$USER "$(git rev-parse --show-toplevel)/.git"

После того, как вы добавите некоторые вещи... зафиксируйте их и после того, как закончите, нажмите на них 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

Проверьте хранилище: $ git remote -v

origin  ssh://git@example.com:2283/srv/git/repo.git (fetch)
origin  ssh://git@example.com:2283/srv/git/repo.git (push)

Обратите внимание, что здесь есть подстрока 'git @', она указывает git аутентифицироваться как имя пользователя 'git' на удаленном сервере. Если вы пропустите эту строку, git будет аутентифицироваться под другим именем пользователя, следовательно, эта ошибка произойдет.

В моем случае не было единой аутентификации (например, в домене + служба, подобная AD) между моей машиной и виртуальным сервером git. Поэтому пользователи и группы git являются локальными для виртуального сервера. В моем случае мой удаленный пользователь (который я использую для входа на удаленный сервер) просто не был добавлен в удаленную группу git.

ssh root@<remote_git_server>
usermod -G <remote_git_group> <your_remote_user>

После этого проверьте права доступа, как описано в постах выше...

ОК - оказывается, это была проблема с разрешениями на GitHub, которая произошла во время разветвления emi/bixo в bixo/bixo. Как только Tekkub исправил это, он снова начал работать.

Так как ошибка связана с разрешениями для папки объектов, я сделал чок непосредственно в папке объектов, и это сработало для меня.

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

У меня есть репозитории на сетевом хранилище Linux от sitecom (никогда не покупайте NAS у Sitecom, pleeaaase). У меня есть репозиторий, который клонирован на многих компьютерах, но мне неожиданно было отказано в этом. Недавно я установил плагин, чтобы мой NAS мог работать как сервер squeezebox.

Этот сервер сканирует медиа для обмена. Чего я не знал, так это того, что, возможно, из-за ошибки сервер изменяет настройку пользователя и группы на squeeze: user для всех файлов, в которые он смотрит. И это ВСЕ файлы. Таким образом меняя права я должен был отодвинуть.

Сервер пропал и восстановлены правильные настройки прав, и все работает отлично.

я использовал

chmod -R g+ws *
chown -R <myuser>:<mygroup> *

Где myuser и mygroup вне курса должны быть заменены надлежащими настройками для вашей системы. попробуйте git: git или gituser: gituser или что-то еще, что вам может понравиться.,

Это работает:

sudo chmod -R gituser.gituser objects
Другие вопросы по тегам