看起来您git config core.sharedRepository 0660
在初始化存储库后更改为,而不是使用git init --shared=0660
which 应该正确设置权限。这意味着 sgid 位不会在 git 存储库的目录中正确设置。您将不得不手动修复此问题(假设 GNU find 和 xargs):
find . -print0 | xargs -0 chgrp group_name
find . -type d -print0 | xargs -0 chmod g+s
对于那些对vs. vs.git init --help
感到困惑的人的摘录:group
true
0660
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]
Specify that the Git repository is to be shared amongst several users.
This allows users belonging to the same group to push into that
repository. When specified, the config variable
"core.sharedRepository" is set so that files and directories under
$GIT_DIR are created with the requested permissions. When not
specified, Git will use permissions reported by umask(2).
The option can have the following values, defaulting to group if no
value is given:
umask (or false)
Use permissions reported by umask(2). The default, when --shared
is not specified.
group (or true)
Make the repository group-writable, (and g+sx, since the git group
may be not the primary group of all users). This is used to loosen
the permissions of an otherwise safe umask(2) value. Note that the
umask still applies to the other permission bits (e.g. if umask is
0022, using group will not remove read privileges from other
(non-group) users). See 0xxx for how to exactly specify the
repository permissions.
all (or world or everybody)
Same as group, but make the repository readable by all users.
0xxx
0xxx is an octal number and each file will have mode 0xxx. 0xxx
will override users' umask(2) value (and not only loosen
permissions as group and all does). 0640 will create a repository
which is group-readable, but not group-writable or accessible to
others. 0660 will create a repo that is readable and writable to
the current user and group, but inaccessible to others.