如何在使用 git pull 时保留群组

如何在使用 git pull 时保留群组

我有一个暂存站点,它是 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

在 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

而 david 对 site.php 没有写入权限,因为组从 'git-users' 更改为 'robin'。从现在起,当 david 尝试拉取到此存储库时,他将收到权限被拒绝的消息。

答案1

解决此问题的最佳方法是设置所有目录的权限。如果您设置了组的“setgid”位,则目录中的所有文件在组成员修改目录时都将保持目录的组。因此,要在暂存站点上快速设置此功能,请执行以下操作:

chmod g+ws [directory]
find [directory] -type d -exec chmod g+ws {} \;
find [directory] -type f -exec chmod g+w {} \;

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

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

git create --shared [directory]

答案2

尝试使用 git submodules,这应该可以解决您的问题。

或者如果你真的不想要它,你可以为此实现一些脚本,这些脚本将在拉取之前存储一些文件,然后将它们弹出,但这也会使您以后在合并时遇到问题。

相关内容