防止Git更改对pull的权限

防止Git更改对pull的权限,git,version-control,Git,Version Control,当我从我的存储库中提取更改时,Git更改了文件权限(实际上,他更改了组write权限) 如果我是正确的,Git应该只跟踪可执行位,并且可以通过将core.filemode设置为false来删除该位 但是,尽管filemode设置为false(在本地、全局和用户中),但当我拉取时,write权限会不断变化 我可以使用git钩子来重置正确的chmod,但这是一种开销,我更希望能够让git完全忽略文件模式的更改 有人知道如何实现这一点吗?一个可能有帮助的配置设置出现在博客文章“”中: 结果证明,解决方

当我从我的存储库中提取更改时,Git更改了文件权限(实际上,他更改了组
write
权限)

如果我是正确的,Git应该只跟踪可执行位,并且可以通过将
core.filemode
设置为false来删除该位

但是,尽管filemode设置为false(在本地、全局和用户中),但当我拉取时,
write
权限会不断变化

我可以使用git钩子来重置正确的chmod,但这是一种开销,我更希望能够让git完全忽略文件模式的更改

有人知道如何实现这一点吗?

一个可能有帮助的配置设置出现在博客文章“”中:

结果证明,解决方案相当简单。
在文件
.git/config
中,我添加了一行内容:“
sharedepository=group
”,如下所示:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sharedRepository = group
此后,在
.git/objects
中创建了具有组写入权限的新文件。
(但是,请注意,新文件是由接收推送的用户帐户的主组拥有的组。如果在项目上协作的用户具有不同的主组,并且这些用户不共享该组的成员资格,则您可能仍会遇到问题。)

确保
umask的

示例:
0660
将使回购对所有者和集团可读/写,但对其他人不可访问(等同于集团,除非
umask
是例如
0022

我使用的解决方案是创建具有您要保留的权限的:

sudo -u user command
在这种情况下,可能是:

sudo -u www-data git pull
www-data


这样可以防止权限更改。我在VPS上更新git存储库时使用它,同时将文件权限设置为Web服务器用户。

另请参见
umask
(或)嘿,谢谢!我的问题不在于.git/objects,而在于repo中的文件,但您对
umask
的评论是正确的。默认情况下,将
umask
设置为
002
允许组写入访问。有趣。我得测试一下+1还必须与用户www数据共享私钥,才能使此解决方案达到最佳快速效果。相关: