从git提取时出错-权限不足,无法将对象添加到存储库数据库.git / objects


112

我有git错误:每当我进行“ git pull origin development”时,“没有足够权限将对象添加到存储库数据库.git / objects中”。

    remote: Counting objects: 70, done.
    remote: Compressing objects: 100% (7/7), done.
    remote: Total 42 (delta 35), reused 42 (delta 35)
    error: insufficient permission for adding an object to repository database     .git/objects

    fatal: failed to write object
    fatal: unpack-objects failed

1
显而易见的问题:您对磁盘上的文件具有访问权限吗?
Lasse V. Karlsen

17
检查.git/objects文件的权限。听起来您sudo在过去的某个时候可能会错误地使用过,并将所有权赋予root自己而不是自己。
克里斯·海斯

我遇到相同的问题@ChrisHayes但是,哪个.git / objects文件?该文件/目录在哪里?
pedroremedios

1
@pedroremedios .git是一个目录,位于每个git repo的基础上。
克里斯·海斯

Answers:


255

假设@ChrisHayes对于意外的sudo是正确的,这应该可以解决。从您的存储库内部:

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

更新:对于那些收到illegal group name错误的人,请尝试以下操作:

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

7
怎么git rev-parse --show-toplevel办?我可以通过chown -R user:user在仓库的顶层目录中使用来解决此问题。
Matt K

9
@MattK这将获取您存储库的顶级目录,因此无论您当前在存储库中的哪个位置,该命令都将起作用。如果您已经在根目录中,则可以运行sudo chown -R $USER:$USER .git
dwurf 2014年

7
我得到: illegal group name
2014年

1
我使用了错误的用户名。该命令有效。谢谢。
2014年

1
在偶然的sudo之后,这也发生在我身上。更改所有者/组将其固定
2015年


2

我的是一个愚蠢的错误...设置了正确的用户名和组,但是访问它的帐户是www-data。该目录归vaindil:www-data拥有,但权限为755,因此www-data无法写入该目录。使用以下方法修复了该问题:

$ sudo chmod -R 775 /path/to/repo


1

不好的做法(只是一种选择)

我正在使用Ubuntu,并且遇到相同的问题。为了解决这个问题,我只是将用户切换为root,而没有看到更多错误。

$su
password

然后,

$git pull origin master

推荐方式:更改目录权限


4
这将起作用(与一样sudo),但是最佳实践是尽可能避免以root用户身份运行命令。
dwurf's

@dwurf谢谢您的评论。这只是上述答案的替代方法。:)
Nabin

1
也不是一个解决方案-您不想将您的存储库用作sudo。
蜡笼

1
@WaxCage是的,但是您已经看到大的粗体了吗?:)
Nabin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.