如何防止 git 更改文件所有权

Posted

技术标签:

【中文标题】如何防止 git 更改文件所有权【英文标题】:How to keep git from changing file ownership 【发布时间】:2013-02-11 03:36:23 【问题描述】:

我注意到,当我从开发服务器 (Red Hat) 上的 github 存储库中拉取文件时,拉取完成后文件的所有权发生了变化。 .git 文件曾经归我所有,但后来我注意到它会以我的身份写入文件,我需要它以不同的用户身份写入文件。所以我改变了 .git 目录的所有权。

我偶然发现了 git config core.filemode,这是真的。从那以后,我将其设置为假。将其设置为 false 后,我没有看到任何差异。我应该怎么做才能防止我的文件所有权发生变化。

这不会发生在我本地。

【问题讨论】:

【参考方案1】:

如果足以保留组,您可以在目录上设置 setgid 标志。见http://en.wikipedia.org/wiki/Setuid

在目录上设置 setgid 权限(“chmod g+s”)会导致在其中创建的新文件和子目录继承其组 ID,而不是创建文件的用户的主组 ID(所有者 ID 是从未受到影响,只有组 ID)。新创建的子目录继承 setgid 位。因此,这为组启用了共享工作空间,而无需在创建新文件或目录之前要求组成员显式更改其当前组的不便。请注意,对目录设置 setgid 权限仅影响设置 setgid 位后创建的新文件和子目录的组 ID,不适用于现有实体。必须手动设置现有子目录的 setgid 位,使用如下命令:

[root@foo]# find /path/to/directory -type d -exec chmod g+s '' \;

【讨论】:

不错的解决方案 - 总是更喜欢看到问题的解决方案,而不是根据特定软件的功能发表评论 - 在这里使用 gid 位很容易获胜。【参考方案2】:

Git 不是部署服务器。它以编写文件的人的身份写入文件,那就是你。如果您需要设置权限和所有权,您可以制作一个结帐后挂钩并让它读取配置文件或其他内容来决定下一步做什么。

【讨论】:

根据我的经验,我不能说这完全正确。如果我更改目录中文件的所有权,然后运行“git pull”,我会为不同的文件获得不同的所有权。一些根,一些我,一些未触及。 git 不存储文件权限,因此您遇到的任何行为都与作为 VCS 的 git 没有直接关系。 .git 目录应该归谁所有?我在服务器上的用户是我用来从 Github 中提取的用户。但是,如果我将自己用作用户,则文件会以我的身份写入磁盘。但我希望它们归网络服务器所有。 git 创建的文件是使用有效运行 git 命令的任何用户的凭据创建的。在 unix(包括 OS X)上以另一个用户身份运行,你可以sudo -u thatuser git somecommand;在 Windows 上我确定 there's some equivalent somewhere,

以上是关于如何防止 git 更改文件所有权的主要内容,如果未能解决你的问题,请参考以下文章

如何防止root运行git pull?

如何防止文件被发送到暂存区?

如何从指定的 git 分支压缩所有更改

git:撤消所有工作目录更改,包括新文件

如何暂存(git add)除嵌入式存储库之外的所有更改和新文件?

防止 Git 在拉取时更改权限