当我从我的存储库中提取更改时,Git 更改了文件权限(实际上,他更改了组write
权限)。
如果我是正确的,Git 应该只跟踪可执行位,并且无论如何都可以使用设置core.filemode
为 false 来删除它。
但是,虽然文件模式设置为 false(在本地、全局和用户中),但当我拉取时,write
权限会不断变化。
我可以使用 git-hooks 来重置正确的 chmod,但这是一些开销,如果有办法让 git 完全忽略文件模式更改,我会更喜欢。
任何人都知道如何实现这一目标?
当我从我的存储库中提取更改时,Git 更改了文件权限(实际上,他更改了组write
权限)。
如果我是正确的,Git 应该只跟踪可执行位,并且无论如何都可以使用设置core.filemode
为 false 来删除它。
但是,虽然文件模式设置为 false(在本地、全局和用户中),但当我拉取时,write
权限会不断变化。
我可以使用 git-hooks 来重置正确的 chmod,但这是一些开销,如果有办法让 git 完全忽略文件模式更改,我会更喜欢。
任何人都知道如何实现这一目标?
此处可能有帮助的一个配置设置是core.sharedRepository
,在博文“在协作存储库中保留对 Git 对象的组写入”中介绍:
结果证明解决方案相当简单。
在文件.git/config
中,我添加了一行内容:“sharedRepository = group
”,如下所示:[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true sharedRepository = group
此后,
.git/objects
使用适当的组写入权限创建了其中的新文件。
(但是,请注意,新文件由接收推送的用户帐户的主要组拥有。如果在项目上协作的用户具有不同的主要组,并且这些用户不共享该组的成员资格组,您可能仍然会遇到问题。)
确保您的价值umask
:
示例:
0660
将使所有者和组可以读/写 repo,但其他人无法访问(相当于组,除非umask
是 eg0022
)。
我使用的解决方案是以具有您要保留的权限的用户身份运行命令:
sudo -u user command
在这种情况下,它可能是:
sudo -u www-data git pull
www-data
至少是 Ubuntu 上的 apache 默认用户。
这可以防止权限更改。我在更新我的 VPS 上的 git 存储库时使用它,同时将文件权限设置为网络服务器用户。