2009-12-16 52 views
124

我得到的背部,同时试图做一个“混帐推”我的GitHub仓库一个不寻常的错误:错误推到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库就好了。
  • 我已经在我的身边检查文件/目录的权限,他们似乎确定。
  • 我在Mac OS X上运行git 1.6.2.3 10.5.8

以上仓库是我的乐趣,为先前的堆栈溢出问题(SO 1904860)的来源,所以也许在GitHub库被损坏。我通过搜索发现的唯一类似问题是在github上报告的unpack failed问题。有其他人时使用GitHub上遇到这个问题之前,特别是?

+0

的可能重复的[GIT中推错误:权限不足以用于将对象添加到数据库储存库(http://stackoverflow.com/questions/6448242/git-push-error-insufficient-permission-for-adding一个对象到资料库数据库) – lpapp 2014-01-28 15:01:39

+0

这个错误的人的另一个提示:我得到这个错误,因为我使用错误的用户推。我的服务器有用户'foo'和'git';都可以读取'/ opt/git/',但只有'git'可以写入。 'git'默认为当前用户,如果没有在'.git/config'中给出,我忘记了。下面没有详细的答案是必要的。 – Sebastian 2014-08-27 07:18:11

回答

1

好的 - 事实证明这是在emi/bixo到bixo/bixo的过程中发生的GitHub上的权限问题。一旦Tekkub解决了这些问题,它就会重新开始工作。

+0

发生了什么,你是如何修复它的?我知道这是一段时间以前......任何想法? – Metagrapher 2012-01-06 15:48:49

+1

这是GitHub的一个问题 - 所以我不知道他们是如何解决它的,只是在GitHub上的“Tekkub”表示“我修复了权限”,然后运行。 – kkrugler 2012-01-06 18:34:02

+0

很酷。谢谢(你的)信息。我结束了对repo的重新克隆。不理想,但它工作。干杯! – Metagrapher 2012-01-09 17:09:08

54

通常这个问题是由于你的Git服务器文件系统上的用户和组权限错误造成的。 git仓库必须由用户以及他的团队拥有。

例子:

如果你的用户被称为 “混帐”,他的研究小组 “gitgroup”,和Git的回购的位置是:[email protected]:路径/到/ repo.git

然后执行:

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

这种固定的git的不足权限错误我。

+0

chown:无效的用户:'git:git' – 2013-04-01 15:08:21

+3

@MariusKavansky尝试$ USER:$ USER而不是git:git – dwurf 2013-11-05 23:28:31

+0

这只适用于我的情况。一些推后我必须重做。 – 2013-11-27 15:45:42

1

这工作:

sudo chmod -R gituser.gituser objects 
+1

编号'chmod'更改文件权限和需求模式作为参数,而不是用户和组,它是'chmod -R $ {some_octal_num} bla'或'chown -R $ {some_user}:$ {some_group} bla' – stpn108 2016-04-28 19:03:34

204

当你看到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 /物体时使用该组文件的权限。

+3

+1它对我们有效。在'sudo chmod -R g + ws *'? – 2011-07-07 12:07:54

+5

这将允许其他用户创建的任何新文件保持根目录的组权限。否则,会有错误推送到存储库[请参阅setuid和setgid](http://en.wikipedia.org/wiki/Chmod#Special_modes) – syvex 2011-07-07 17:05:17

+0

我在Debian 6和PHPStorm IDE上得到了与Gitorious相同的错误,并带有此消息“错误:将对象添加到存储库数据库的权限不足。 git/objects“。我在项目的父文件夹中使用了这个解决方案,工作于ni与“+招”一起。 – Benj 2013-04-22 08:55:24

4

文件模式应该是CHOWN,所以正确的路线是:

sudo chown -R gituser:gituser objects 
2

如果仍然收到此错误后设置,您可能需要修改创建掩码的权限。我们发现我们的新提交(对象下的文件夹)仍然是在没有组写入权限的情况下创建的,因此只有提交它们的人可以将其推入存储库。

我们通过将SSH用户的umask设置为002并使用所有用户共享的适当组来解决此问题。

例如

umask 002 

其中中间0被允许通过默认组写。

+0

您确定在Unix或Linux中有这样的命令吗?因为我非常确定umask不是位置特定的。 – 2012-10-10 12:05:19

+0

是的,我很抱歉,你是对的 - 我不知道为什么我认为它有一个额外的目录参数。它只适用于用户。我已更新评论。 – scipilot 2012-10-15 03:17:12

1

由于错误处理对象文件夹的权限,我直接在对象文件夹上做了一个chown,它对我很有用。

3

奇怪的是,我对回购我有一个克隆这一问题,但不是另一个我。除了重新克隆repo(同事为解决此问题所做的工作),我设法对发生故障之前的提交进行了“git reset”。然后我重新进行了修改,之后我能够成功推送。因此,尽管所有迹象表明服务器上存在问题,但在本例中显然表明本地回购中存在一些怪异现象。

4

上面没有为我工作。几个小时后,我找到了问题的原因: 我用

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

不幸的是我存放与配置为用户身份登录myOtherUserexample.com油灰会话类型的回购网址。因此,虽然我认为git使用用户'git'连接到主机example.com,但Git/TortoiseGit已连接到使用用户myOtherUser的腻子会话example.com。这导致了完全相同的..insufficient permission..错误(导致两个用户在不同的组中)。

解决方案:重命名腻子会议example.com[email protected]

1

我想很多喜欢我,当上述occoures描述git的问题在论坛结束了这个样子。然而,有很多原因可能导致这个问题,我只是想分享是什么导致了我的麻烦让其他人学习,因为我已经从上面学到了。

我从sitecom的Linux NAS上获得了我的回购(从未从Sitecom购买NAS,pleeaaase)。我在这里有一个在许多计算机上克隆的回购商品,但我突然被拒绝推销。最近我安装了一个插件,以便我的NAS可以作为挤压服务器。

此服务器扫描媒体分享。我不知道的是,可能由于一个错误,服务器将用户和组的设置更改为挤压:用户查看所有文件。这就是所有文件。从而改变了我不得不推动的权利。

服务器消失了,重新建立正确的权限设置,一切完美的作品。

我用

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

凡为myuser和MYGROUP场外必须为你的系统正确的设置所取代。尝试git:git或gituser:gituser或其他你可能会喜欢的东西。,

2

添加一些东西后...提交它们,并在所有完成后推!砰!!开始所有问题......正如您应该注意的那样,新项目和现有项目的定义方式存在一些差异。如果其他人尝试添加/提交/推相同的文件或内容(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 =组做了新的存储库,根据文档,这使得存储库组可写,做执行:

$ git config core.sharedRepository group 

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

1

检查仓库: $ git的远程-v

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

注意,有一个“git的@”这里串,它指示混帐的远程服务器上的用户名“混帐”进行身份验证。如果你省略这一行,git将以不同的用户名进行身份验证,因此会发生此错误。

2
sudo su root 

chown -R user:group dir 

该目录是你的git回购。

然后做:

git pull origin master 

你会看到其他人提交的变化。

2

尽量做到以下几点:

转到您的服务器

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

然后到你的工作副本(本地存储库)和git repack master

完美的作品给我重新包装。

2

则可以使用此

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

这是干什么的?你能添加一个解释吗? – 2014-06-16 04:32:44

+0

这将得到您的回购的顶层目录,因此无论您目前在回购目录中的哪个位置,该命令都可以工作。如果你已经在root中,你可以运行sudo chown -R $ USER:$ USER .git – 2014-06-16 09:59:38

+0

将它编辑到你的问题中。否则你的问题是没用的。 – 2014-06-16 14:53:08

1

在我的情况没有统一认证(例如所访问的+ AD样服务内)我的机器和git虚拟服务器之间。因此,git用户和组对于虚拟服务器是本地的。在我的情况下,我的远程用户(我用来登录到远程服务器)只是没有添加到远程git组。

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

随后入住喜欢在上面的帖子定律描述的权限...

3

我得到这个错误,因为每当用户推送一些内容,该组文件的更改给用户。然后,如果其他用户试图推入存储库,则会导致权限错误,并且推送被拒绝。因此,需要让系统管理员更改存储库的设置,以便任何用户的任何推送都不会更改存储库中任何文件的组。

为了避免这样的问题,请确保当你初始化你的git仓库时,使用命令“git init --shared = group”。

+0

更多的解释,你可以看到链接http://stackoverflow.com/questions/16183345/file-ownership-group-is-changed-when-users-push-to-a-git-repository – 2014-07-31 06:45:20

32
sudo chmod 777 -R .git/objects 
+3

这对我工作。 ..但WTF ??我已经更新了几个月的回购协议,今天下午突然开始... – GojiraDeMonstah 2015-02-10 20:17:22

+0

对我来说修复几乎是一样的,但涉及更改/更正.git目录中某些文件的所有者。 我已经做了一些git维护,但以“root”身份登录,似乎已将所有者更改为root,或者创建了一些git所依赖的root所有者的新文件。 我有一个自动部署脚本运行在'apache'拥有者然后停止工作。 – coatesap 2015-06-11 16:35:57

+8

'chmod 777'永远不是一个好的解决方案,只是一个不安全的解决方法。尝试@ Syvex的答案,而不是(使用setgid) – 2015-07-09 16:02:03

1

你有没有尝试须藤混帐推-u起源--all?有时候,这是你需要避免这个问题的唯一方法。它会要求您输入管理员系统密码 - 您可以登录到您的计算机的那个密码 - 这就是您需要推送或提交的内容,如果是这样的话。

10

当我试图git pull时,发生在我身上。一些分析表明,有人曾在过去使用过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/ 

和它的工作!

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

+0

这解决了我的问题!....我是用root访问提交的用户:) – danidee 2016-08-26 18:30:05

相关问题