当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足

这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。


当前回答

对我来说,这些建议都没用。我在Windows上,这对我来说很有效:

将远程回购复制到另一个文件夹中 共享文件夹并授予适当的权限。 确保您可以从本地计算机访问该文件夹。 将此回购添加为本地回购中的另一个远程回购。(git remote add foo //SERVERNAME/path/to/ replicated /git) Push到foo。Git push foo master。有用吗?太棒了!现在删除not-working repo并将其重命名为之前的任何内容。确保权限和共享属性保持不变。

其他回答

我在使用Vagrant运行远程开发开发机器时得到了这个错误。上述解决方案都不能工作,因为所有文件都具有正确的权限。

我把config.vm.box = "hasicorp/ bioniic64 "改为config.vm.box = "bento/ubuntu-20.10"。

我只是尝试了sudo git commit -m“XY”,然后我用CTRL + C取消了它,然后再次尝试git commit -m“XY”,然后它突然工作了。

修复权限

我用这个来修复我的。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命令引起的。 收到的信息是:

$ 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"

您需要对要推入的目录具有足够的写权限。

在我的例子中:Windows 2008服务器

右键单击git回购目录或父目录。

属性>共享选项卡>高级共享>权限>确保用户具有适当的访问权限。