当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当前回答
sudo chmod -R ug+w .;
基本上,.git/objects文件没有写权限。上面的代码行授予目录中所有文件和文件夹的权限。
其他回答
我通过使用ssh://基于URL而不是基于http://的URL解决了这个问题。
几天前,我使用基于http://的URL克隆了存储库。在克隆和推送之间,我不得不在我的帐户上启用2FA,随后将我的公钥添加到代码库中。
由于启用了2FA, http:// URL无法正常工作。
使用下面的命令,就像魔术一样
sudo chown -R "${USER:-$(id -un)}" .
准确地输入命令(在结尾有额外的空格和一个点)
命令分解
sudo
以root用户运行
chown
改变所有权
-R
针对所有文件和文件夹的递归操作
"${USER:-$(id -un)}"
从$ user中获取用户名,如果没有设置,则通过运行id -un获取值
.
定位当前目录
我在Samba共享上的远程存储库遇到了这个问题;我成功地从这个遥控器上拉了出来,但在推它的时候失败了。
错误的原因是我的~/中的凭据不正确。smbcredentials文件。
我将补充我的意见,作为一种发现目录中具有特定所有权的文件的方法。
该问题是由于以根用户身份运行某些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"
修复权限
我用这个来修复我的。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 '{}' +
这也将修复所有子模块。