推送到GitHub时出错 - 没有足够的权限将对象添加到存储库数据库

kkr*_*ler 126 git github

尝试对我的GitHub存储库执行"git push"时,我回到了一个不寻常的错误:

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存储库就好了.
  • 我已经检查了我的文件/目录权限,他们似乎没问题.
  • 我在Mac OS X 10.5.8上运行git 1.6.2.3

上面的存储库是我以前的Stack Overflow问题(SO 1904860)的乐趣之源,所以可能GitHub repo被破坏了.我通过搜索发现的唯一类似问题是在github上报告的解包失败问题.有没有其他人遇到此问题,尤其是在使用GitHub时?

syv*_*vex 210

当你在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
Run Code Online (Sandbox Code Playgroud)

在此之后,git守护程序在写入.git/objects时应使用组文件权限.

  • 这将允许其他用户创建的任何新文件维护根目录的组权限.否则,您将无法推送到存储库.[见setuid和setgid](http://en.wikipedia.org/wiki/Chmod#Special_modes) (5认同)
  • +1它对我们有用.什么是'sudo chmod -R g + ws*'的's'? (4认同)
  • repo-config已经过时了.应该是`git config core.sharedRepository true`. (3认同)
  • 注意:如果使用通配符"*",隐藏文件和文件夹(例如.git!)可能不会受到影响!因此,如果以上内容对您不起作用,请同时运行./.git*命令 (3认同)

Bij*_*jan 54

通常,此问题是由Git服务器文件系统上的用户和组权限错误引起的.git存储库必须由用户和他的组拥有.

例:

如果您的用户被称为"git",他的组"gitgroup",以及Git仓库的位置是:git@mygitserverxyz.com:path/to/repo.git

然后做一个:

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

这为我修复了git不足的权限错误.

  • @MariusKavansky尝试$ USER:$ USER而不是git:git (4认同)

Far*_*mov 34

sudo chmod 777 -R .git/objects
Run Code Online (Sandbox Code Playgroud)

  • `chmod 777`永远不是一个好的解决方案,只是一个不安全的解决方法.试试@Syvex的答案(使用setgid) (9认同)
  • 这对我有用......但是WTF ?? 几个月来我一直在更新回购,今天下午突然开始...... (4认同)

Tho*_*mas 10

当我尝试时,这发生在我身上git pull.一些分析表明,过去曾有人提交root用户,从而创建了一些拥有root权限的对象.git/objects.

所以我跑了

cd <repo>
la .git/objects/
Run Code Online (Sandbox Code Playgroud)

并且显示了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
Run Code Online (Sandbox Code Playgroud)

然后我跑了

sudo chown -R user:user .git/objects/
Run Code Online (Sandbox Code Playgroud)

它工作了!

当然,我正在用我的真实用户替换用户.


小智 5

chmod 应该是 chown,所以正确的行是:

sudo chown -R gituser:gituser objects
Run Code Online (Sandbox Code Playgroud)


Zen*_*ula 5

以上都没有对我有用。几个小时后,我找到了问题的原因:我使用了该类型的 repo url

ssh://git@example.com/~git/repo.git
Run Code Online (Sandbox Code Playgroud)

不幸的是,我存储了一个名称example.com为 user的腻子会话myOtherUser

因此,虽然我认为 gitexample.com使用用户 'git'连接到主机,但 Git/TortoiseGit 已连接到example.com使用 User的腻子会话myOtherUser。这会导致完全相同的..insufficient permission..错误(因为两个用户都在不同的组中)。

解决方法:将putty session重命名example.commyOtherUse@example.com


kkr*_*ler 1

好的 - 结果是 GitHub 上的权限问题发生在 emi/bixo 到 bixo/bixo 的 fork 过程中。Tekkub 修复这些问题后,它又开始工作了。

  • 我们,呃,我们修复了*故障*。所以他不会再收到薪水了,一切都会自然而然地解决。 (4认同)