我有一个暂存站点,它是 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,这应该可以解决您的问题。
或者如果你真的不想要它,你可以为此实现一些脚本,这些脚本将在拉取之前存储一些文件,然后将它们弹出,但这也会使您以后在合并时遇到问题。