25

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

如果我是正确的,Git 应该只跟踪可执行位,并且无论如何都可以使用设置core.filemode为 false 来删除它。

但是,虽然文件模式设置为 false(在本地、全局和用户中),但当我拉取时,write权限会不断变化。

我可以使用 git-hooks 来重置正确的 chmod,但这是一些开销,如果有办法让 git 完全忽略文件模式更改,我会更喜欢。

任何人都知道如何实现这一目标?

4

2 回答 2

18

此处可能有帮助的一个配置设置是core.sharedRepository,在博文“在协作存储库中保留对 Git 对象的组写入”中介绍:

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

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sharedRepository = group

此后,.git/objects使用适当的组写入权限创建了其中的新文件。
(但是,请注意,新文件由接收推送的用户帐户的主要组拥有。如果在项目上协作的用户具有不同的主要组,并且这些用户不共享该组的成员资格组,您可能仍然会遇到问题。)

确保您的价值umask

示例:0660将使所有者和组可以读/写 repo,但其他人无法访问(相当于组,除非umask是 eg 0022)。

于 2012-10-04T20:24:10.000 回答
9

我使用的解决方案是以具有您要保留的权限的用户身份运行命令:

sudo -u user command

在这种情况下,它可能是:

sudo -u www-data git pull

www-data 至少是 Ubuntu 上的 apache 默认用户

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

于 2016-06-15T00:42:38.760 回答