当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当我尝试推到共享git远程时,我得到以下错误: 向存储库数据库添加对象权限不足
这适用于下一次推送,因为所有的文件都属于正确的组,但下一次有人推送一个更改时,它会在对象文件夹中创建一个新项目,该项目的默认组为组。我唯一能想到的就是改变所有开发人员签入项目的默认组,但这似乎是一种hack。什么好主意吗?谢谢。
当前回答
使用下面的命令,就像魔术一样
sudo chown -R "${USER:-$(id -un)}" .
准确地输入命令(在结尾有额外的空格和一个点)
命令分解
sudo
以root用户运行
chown
改变所有权
-R
针对所有文件和文件夹的递归操作
"${USER:-$(id -un)}"
从$ user中获取用户名,如果没有设置,则通过运行id -un获取值
.
定位当前目录
其他回答
只需复制并粘贴到您自己的终端。
sudo chown -R "${USER:-$(id -un)}" .
对我来说,这些建议都没用。我在Windows上,这对我来说很有效:
将远程回购复制到另一个文件夹中 共享文件夹并授予适当的权限。 确保您可以从本地计算机访问该文件夹。 将此回购添加为本地回购中的另一个远程回购。(git remote add foo //SERVERNAME/path/to/ replicated /git) Push到foo。Git push foo master。有用吗?太棒了!现在删除not-working repo并将其重命名为之前的任何内容。确保权限和共享属性保持不变。
使用下面的命令,就像魔术一样
sudo chown -R "${USER:-$(id -un)}" .
准确地输入命令(在结尾有额外的空格和一个点)
命令分解
sudo
以root用户运行
chown
改变所有权
-R
针对所有文件和文件夹的递归操作
"${USER:-$(id -un)}"
从$ user中获取用户名,如果没有设置,则通过运行id -un获取值
.
定位当前目录
在使用git很长一段时间没有问题之后,我今天遇到了这个问题。经过一些思考,我意识到我今天早些时候把我的面具从022换成了别的东西。
其他人的所有答案都是有帮助的,例如,对有问题的目录执行chmod。但根本原因是我的新umask,每当在.git/object/下创建一个新目录时,它总是会导致一个新问题。所以,对我来说,长期的解决方案是把umask改回022。
如果您使用不同的用户运行git init,而不是您计划在推送更改时使用的用户,则很容易发生这种情况。
如果你盲目地遵循[1]上的说明,这可能会发生,因为你可能创建了git-user作为根用户,然后立即转移到git init,而没有改变用户。
[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server