当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当前回答
sudo chmod -R ug+w .;
基本上,.git/objects文件没有写权限。上面的代码行授予目录中所有文件和文件夹的权限。
其他回答
修复权限
我用这个来修复我的。git文件夹,@richard-hansen的答案缺少用户。
首先,您需要进入.git文件夹。
cd /path/to/repo/.git
然后执行这些命令。
sudo chown -R user:groupname .
sudo chmod -R g+rwX .
sudo find . -type d -exec chmod g+s '{}' +
这也将修复所有子模块。
如果您使用不同的用户运行git init,而不是您计划在推送更改时使用的用户,则很容易发生这种情况。
如果你盲目地遵循[1]上的说明,这可能会发生,因为你可能创建了git-user作为根用户,然后立即转移到git init,而没有改变用户。
[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
当我进入Rstudio项目时,我得到了这个。我意识到我忘了做:
sudo rstudio
程序启动时。事实上,我有另一个bug,我需要做的是:
sudo rstudio --no-sandbox
调试这种情况的一个好方法是,下次发生这种情况时,SSH到远程repo, cd到objects文件夹,并执行ls -al。
如果您看到2-3个文件具有不同的用户:组所有权,那么这就是问题所在。
在过去,我遇到过一些遗留脚本访问我们的git repo,通常意味着不同的(unix)用户最后推送/修改文件,而您的用户没有权限覆盖这些文件。你应该创建一个共享git组,所有启用git的用户都在其中,然后递归地chgrp objects文件夹和它的内容,这样它的组所有权就是共享git组。
您还应该在文件夹上添加一个sticky位,以便在文件夹中创建的所有文件将始终具有git组。
Chmod g+s目录名
更新:我不知道core. sharerepository。很高兴知道这一点,尽管它可能只是做上述工作。
我将补充我的意见,作为一种发现目录中具有特定所有权的文件的方法。
该问题是由于以根用户身份运行某些git命令引起的。 收到的信息是:
$ git commit -a -m "fix xxx"
error: insufficient permission for adding an object to repository database .git/objects
error: setup.sh: failed to insert into database
我首先查看了git config -l,然后我解决了:
find .git/ -exec stat --format="%G %n" {} + |grep root
chown -R $(id -un):$(id -gn) .git/objects/
git commit -a -m "fixed git objects ownership"