0

我们使用 git 进行源代码管理并拥有一个 SLES 服务器,我们将其用作 git 存储库的远程。我们使用 SSH 访问 git,使用真实用户名,而不是单个 git 用户替代方案,后者将通过authorized_keysgit 用户的文件进行身份验证。

不久前,我发现推送到我们的遥控器有问题。一位用户能够推送,而另一位用户无法推送。于是我开始分析,为什么某些用户不能推送。我终于弄清楚了根本原因是什么:远程上的裸存储库总是有一个名为 的目录objects,提交最终通过推送过程保存在其中。该目录包含带有哈希值前两个字符的子目录。如果尚未创建目录,则会在推送到远程期间创建该目录。

这就是它的神秘之处,我无法对自己解释:一些用户使用权限创建这些目录rwxrwsr-x,而其他用户使用rwxr-swr-x. 可以看到,设置了set-gid位,就OK了。但我无法真正解释为什么有些用户创建具有组写权限的目录,而其他用户则没有。

这里的陷阱是,如果用户 A 创建一个没有组写入权限的目录,并且用户 B 计算一个以用户 A 已创建目录的两个字符开头的哈希值,则用户 B 无法将文件(提交)放在同一目录中,这使得用户 B 无法推送到远程。

我已经注意了默认的 umask 设置,它们可能不同,但找不到不同的设置。我们 SLES 服务器上的所有用户都有默认掩码0022,这将导致创建文件rw-r--r--和目录rwxr-xr-x。这是第二个谜:为什么有些用户在 git 中创建目录rwxrwsr-x(这对于 git 和预期是正确的),尽管 umask 0022

有没有人提示我进行进一步的故障排除?我想要实现的是用户objects使用rwxrwsr-x.

4

1 回答 1

0

git config core.sharedRepository 0660

在服务器存储库中。请参阅文档

于 2020-01-30T12:02:26.333 回答