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

Я получаю необычную ошибку, пытаясь сделать "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 [email protected]:bixo/bixo.git
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to '[email protected]:bixo/bixo.git'
  • После чистого клона от GitHub я могу редактировать/добавлять/фиксировать/нажимать измененный файл.
  • Если я повторю это во второй раз, я получаю вышеуказанную ошибку.
  • Я могу просто нажать на другие репозитории GitHub.
  • Я проверял права на файл/каталог на моей стороне, и они выглядят нормально.
  • Я запускаю git 1.6.2.3 на Mac OS X 10.5.8

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

Ответ 1

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

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

ssh [email protected]
cd repository/.git

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

git config core.sharedRepository true

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

Ответ 2

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

Пример:

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

то выполните a:

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

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

Ответ 3

sudo chmod 777 -R .git/objects

Ответ 4

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

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

cd <repo>
la .git/objects/

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

[email protected]:/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/

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

Я заменил пользователя на своего настоящего пользователя.

Ответ 5

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

sudo chown -R gituser:gituser objects

Ответ 6

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

ssh://[email protected]/~git/repo.git

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

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

Решение. Переименуйте сеанс шпатлевки example.com в [email protected]

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

например.

umask 002

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

Ответ 10

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

Чтобы решить эту проблему, вам нужно иметь в виду систему системных разрешений, поскольку в этом случае вы ограничены ею. Tu лучше поймите проблему, идите в свою папку объектов 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 done для нового репозитория, в соответствии с документацией, это сделает репозиторий доступным для группы, выполнив его:

$ git config core.sharedRepository group

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

Ответ 11

sudo su root

chown -R user:group dir

Диск - это ваш git репо.

Тогда do:

git pull origin master

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

Ответ 12

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

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

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

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

sudo chmod -R gituser.gituser objects

Ответ 16

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

Ответ 17

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

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

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

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

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

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

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

Ответ 18

Проверьте репозиторий:   $ git remote -v

origin  ssh://[email protected]:2283/srv/git/repo.git (fetch)
origin  ssh://[email protected]:2283/srv/git/repo.git (push)

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

Ответ 19

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

ssh [email protected]<remote_git_server>
usermod -G <remote_git_group> <your_remote_user>

После этого проверьте разрешения, как описано в сообщениях выше...

Ответ 20

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