忽略文件模式的 Git 配置无法工作

3
我正在使用在Ubuntu Linux服务器上的gitolite git服务器。我使用了一个钩子,在每次推送时将更新服务器目录(其中包括实时网站的源代码)。
现在,每当我在本地计算机上更改内容并将更改推送到服务器时,钩子被调用并且拉取请求被成功执行。但是,问题是,已更新的文件现在具有更改的权限。例如:
rwxrwxr_x (before)
rwx_____x (After)

在进行了一些搜索之后,我找到了这个解决方案。我已经尝试过使用我的全局git配置和仓库特定的配置设置。在设置了配置之后,每次我尝试从本地电脑推送时,与上述相同的问题仍然会发生,因此似乎由于某种原因,该解决方案无法运行。
请问有人有任何想法,可能是什么原因呢?除了配置设置之外,我是否需要做其他事情?欢迎提出任何建议。先谢谢了。

1
确保您的钩子以umask 002开头。 - VonC
很好,我已经添加了一个答案以反映这个解决方案。 - VonC
1个回答

4

正如OP Rana评论中所确认的那样,如果钩子以以下方式开始:

umask 002

它将生成具有正确保护的文件。
Alan Thompson提到:

core.filemode仅影响与您的工作目录有差异的diff,而不是库中两个提交之间的diff。
因此,如果您已经提交了不同的文件模式,则必须使用filter-branch,例如在“Can I make git diff ignore permission changes”中。

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all

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