当我尝试推送到共享git远程时,出现以下错误: insufficient permission for adding an object to repository database
然后,我在此处了解到一个修复程序: 修复此操作适用于下一次推送,因为所有文件都属于正确的组,但是下次有人推送更改时,它将在具有默认组的对象文件夹中创建一个新项目作为组。 我唯一能想到的就是更改开发人员签入的所有项目的默认组,但这似乎是一种hack。 有任何想法吗? 谢谢。
#1楼
我遇到了同样的问题。 在这里阅读时,我意识到这是消息所指的文件权限。 对我来说,解决方法是:
/etc/inetd.d/git-gpv
它以用户“ nobody ”的身份启动git-daemon,因此缺少写许可权。
# Who When What
# GPV 20Nov13 Created this by hand while reading: http://linuxclues.blogspot.co.uk/2013/06>/git-daemon-ssh-create-repository-debian.html
# GPV 20Nov13 Changed owner (to user_git) otherise nobody lack permission to update the repository
#git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo
git stream tcp nowait user_git /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo
(我怀疑其他人是否将他们的inetd conf文件称为git-gpv。通常它直接位于/etc/inetd.conf中)
#2楼
添加一些东西后...提交它们,并完成所有推送! 砰!! 开始所有问题...您应该注意到,定义新项目和现有项目的方式有所不同。 如果其他人尝试添加/提交/推送相同的文件或内容(git将两个对象都保留为相同的对象),我们将面临以下错误:
$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects remote: fatal: failed to write object
要解决此问题,您必须牢记操作系统的权限系统,因为在这种情况下会受到其限制。 Tu更好地了解了问题,请继续检查git对象的文件夹(.git / objects)。 您可能会看到类似的内容:
@ objects]$ ls -la
total 200
drwxr-xr-x 25 2048 Feb 10 09:28 .
drwxr-xr-x 3 1024 Feb 3 15:06 ..
drwxr-xr-x 2 1024 Jan 31 13:39 02
drwxr-xr-x 2 1024 Feb 3 13:24 08
*请注意,这些文件的权限仅授予您的用户,没有人永远无法更改它... *
Level u g o
Permission rwx r-x ---
Binary 111 101 000
Octal 7 5 0
解决问题
如果您具有超级用户权限,则可以使用第二步继续自己更改所有权限,在任何其他情况下,您都需要询问所有具有用其用户创建的对象的用户,请使用以下命令来知道他们是谁:
$ ls -la | awk '{print $3}' | sort -u
现在,您和所有文件的所有者用户都必须更改这些文件的权限,方法是:
$ chmod -R 774 .
之后,您将需要添加一个新属性,该属性与为新存储库完成的--shared = group等效,根据文档,这使存储库组可写,请执行以下操作:
$ git config core.sharedRepository group
#3楼
如果您与计划推送变更的用户以不同的用户身份运行git init ,则很容易发生这种情况。
如果您盲目地按照[1]上的说明进行操作,则可能是因为您可能以root用户身份创建了git-user,然后立即转到git init而不在其间更改用户。
#4楼
您需要对要推送到的目录有足够的写权限。
就我而言: Windows 2008服务器
右键单击git repo目录或父目录。
属性>共享选项卡>高级共享>权限>确保用户具有适当的访问权限。
#5楼
就我而言,这些建议都没有奏效。 我在Windows上,这对我有用:
将远程仓库复制到另一个文件夹
共享文件夹并给予适当的权限。
确保可以从本地计算机访问该文件夹。
将此仓库添加为本地仓库中的另一个远程仓库。 ( git remote add foo //SERVERNAME/path/to/copied/git )
推到foo。 git push foo master 。 奏效了吗? 大! 现在删除无法正常工作的存储库,并将其重命名为以前的版本。 确保权限和共享属性保持不变。