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

22
我注意到,当我从Github上拉取代码到开发服务器(Red Hat)时,文件的所有权在拉取完成后会发生变化。以前我的.git文件是属于我的,但后来我注意到它会以我的身份编写文件,而我需要它作为不同用户编写文件。所以我改变了.git目录的所有权。
我偶然发现了git config core.filemode,它的值为true。我已经将它设置为false,但设置后没有看到任何区别。我应该怎么做才能保持文件的所有权不变?
这在本地不会发生。
2个回答

44

如果只需要保留组信息,可以在目录上设置setgid标志。请参见http://en.wikipedia.org/wiki/Setuid

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

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


5
好的解决方案 - 总是更喜欢看到针对问题的解决方案,而不是基于特定软件的评论 - 在这里使用 gid 位是一个简单的胜利。 - Aaron Dobbing

10

Git并不是一个部署服务器。它会将文件写入成为文件作者的身份,也就是你。如果您需要设置权限和所有权,您可以编写一个post-checkout hook,并让其读取配置文件或其他内容来决定接下来要做什么。


根据我的经验,我不能说这完全是正确的。如果我更改目录中文件的所有权,然后运行'git pull',不同的文件会有不同的所有者。有些是root,有些是我,还有一些没有变动。 - user2108258
3
Git不存储文件权限,因此您遇到的任何行为与Git作为版本控制系统没有直接关系。 - wRAR
.git目录应该归谁所有?我在服务器上使用的用户是从Github拉取代码时使用的那个。但是,如果我将自己作为用户,则文件会以我的身份写入磁盘。但是我希望它们归Web服务器所有。 - user2108258
5
Git创建的文件将使用实际运行git命令的用户的凭据进行创建。在Unix(包括OS X)中,要以另一个用户身份运行,可以使用sudo -u thatuser git somecommand; 在Windows上,我相信某个等效的方法是可用的。 - jthill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接