我有一个裸中央仓库,已启用此选项:
git config core.sharedRepository true
由于某种原因,此 CentOS 计算机上从中央存储库拉取/推送的其他用户在推送到某人已经推送的分支时总是会遇到权限错误。
我查看了对象目录并发现,首先推送的人的用户名将被设置为所有者和组。
我已经将其设置为所有用户都属于“开发人员”组,然后 chgrp -R 将裸存储库置于“开发人员”组所有权之下,但这还没有解决问题。
还有其他建议吗?
更多信息:
当我按下时,会发生以下情况:
[dave@localhost wd]$ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
error: insufficient permission for adding an object to repository database ./objects
fatal: failed to write object
error: pack-objects died of signal 13
error: failed to push some refs to '/gitrepos/repo.git'
如您所见,裸中央存储库上对象文件夹内的权限具有属于另一个用户 jane 的不同权限的目录(该列表已缩短以便于阅读):
[dave@localhost objects]$ ls -la
total 248
drwxrwxr-x 62 root developers 4096 Dec 13 15:37 .
drwxrwxr-x 9 root developers 4096 Dec 13 15:34 ..
drwxrwxr-x 2 root developers 4096 Dec 12 16:05 01
drwxrwxr-x 2 root developers 4096 Dec 12 16:05 2f
drwxrwsr-x 2 jane jane 4096 Dec 13 15:37 30
drwxrwxr-x 2 root developers 4096 Dec 12 16:19 33
drwxrwxr-x 2 root developers 4096 Dec 12 16:05 39
drwxrwxr-x 2 root developers 4096 Dec 12 16:19 6c
drwxrwxr-x 2 root developers 4096 Dec 12 16:05 89
drwxrwsr-x 2 jane jane 4096 Dec 13 15:37 8b
drwxrwxr-x 2 root developers 4096 Dec 13 05:41 8e
drwxrwxr-x 2 root developers 4096 Dec 12 16:19 90
drwxrwxr-x 2 root developers 4096 Dec 12 14:32 info
drwxrwxr-x 2 root developers 4096 Dec 12 14:32 pack
答案1
您要么需要确保用户使用 002 作为其 umask,以便新创建的文件为 g+w,要么需要使用扩展 acl 来设置此存储库中创建的新文件的默认权限。umask 是您在环境中设置的内容,可能在 .bashrc 或 /etc/profile 或某些此类启动文件中,但它会影响在任何地方创建的文件。您无法将 umask 本地化到一个特定目录。如果您需要在特定目录中实现此行为,则可能必须使用扩展文件系统 ACL,这需要使用 acl 选项重新挂载文件系统并使用 setfacl 更改默认 acl。无论哪种情况,您都应该将所有目录归为“开发人员”所有,然后 chmod g+s,这将使新目录/文件继承此组所有权
答案2
对于这种情况,git init
选项在期间很有用(它执行 g+sx 操作)--shared=group