使用 git 拉取时如何保持组

mim*_*ock 1 linux git file-permissions

我有一个临时站点,它是 git 存储库的工作目录。如何设置 git 让开发人员在不更改修改文件组的情况下拉出分支或发布?

一个例子。假设我有两个开发人员,robin 和 david。他们都在 git-users 组中,所以最初他们都可以在 site.php 上拥有写权限。

-rw-rw-r--  1 robin git-users   46068 Nov 16 12:12 site.php
drwxrwxr-x  8 robin git-users    4096 Nov 16 14:11 .git
Run Code Online (Sandbox Code Playgroud)

在 robin-server1$ git pull origin master 之后:

-rw-rw-r--  1 robin robin       46068 Nov 16 12:35 site.php
drwxrwxr-x  8 robin git-users    4096 Nov 16 14:11 .git
Run Code Online (Sandbox Code Playgroud)

而且david对site.php没有写权限,因为组从'git-users'变成了'robin'。从现在开始,当 david 尝试拉取到此存储库时,他将获得权限被拒绝。

小智 5

这最好通过设置所有目录的权限来解决。如果您设置了组的“粘性”位,则当组成员修改它们时,目录中的所有文件都将保持该目录的组。因此,要在临时站点上快速设置它,请执行以下操作:

chmod g+ws [directory]
find [directory] -type d -exec chmod g+ws {} \;
find [directory] -type f -exec chmod g+w {} \;
Run Code Online (Sandbox Code Playgroud)

第一个命令为站点顶级目录中的组设置写入位和粘滞位。第二个然后找到顶级文件夹的所有子目录并执行相同的操作。第三个然后确保该组具有对所有文件的写访问权限。

当您最初创建 git 存储库时,您可以使用以下--shared选项让它自动执行上述操作:

git create --shared [directory]
Run Code Online (Sandbox Code Playgroud)