防止 Git 在拉取代码时更改文件权限

30

当我从我的代码库拉取更改时,Git会更改文件权限(实际上,它会更改组的写入权限)。

如果我没错的话,Git只应跟踪可执行位,并且可以使用设置core.filemode为false来删除此设置。

但是,即使文件模式已设置为假(在本地、全局和用户中),当我拉取时,写入权限仍然会不断变化。

我可以使用git-hooks来重置正确的chmod,但这会增加一些额外的工作量,我更喜欢有一种方法仅仅请求git完全忽略文件模式的更改。

有人知道如何实现吗?


相关链接:https://dev59.com/-XE85IYBdhLWcg3w_Itr - Martin Smith
2个回答

24

有一个配置设置可能有所帮助,它是core.sharedRepository,在博客文章“Preserving Group Write on Git Objects in a Collaborative Repository”中提出:

解决方案相当简单。
在文件.git/config中,我添加了一行内容:"sharedRepository = group",像这样:

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

之后,.git/objects 中的新文件将以适当的组写权限创建。
(但是需要注意的是,新文件的所有权归接收推送的用户账户的主要组。如果在该组中协作的用户具有不同的主要组,并且这些用户在那些组中没有共享成员身份,则仍可能会遇到问题。)

确保你的umask 值正确:

例如:0660 可以使得仓库对于拥有者和组可读写,但对于其他人无法访问(相当于组,除非 umask 值为例如 0022)。


2022年(10年后),SyedAsadRazaDevops评论中补充道:

在Ubuntu(Linux)中,只需进入项目仓库并运行此命令:nano .git/config 并在 [core] 部分添加 sharedRepository = group

这与以下命令相同:

cd /path/to/repo
git config core.sharedRepository group

1
请参阅 https://groups.google.com/forum/?fromgroups=#!topic/repo-discuss/QrJII6gTLGM 中关于 umask 的讨论(或者 http://serverfault.com/questions/26954/how-do-i-share-a-git-repository-with-multiple-users-on-a-machine)。 - VonC
2
嘿,谢谢!我的问题不是关于.git/objects文件夹,而是关于仓库中的文件,但你对umask的评论是正确的。将umask设置为002允许默认的组写入权限。 - Simon Boudrias
在Ubuntu(Linux)中,只需转到项目存储库并运行此命令nano .git/config,然后在**[core]**部分中添加sharedRepository = group,谢谢@VonC @syedasadrazadevops。 - SyedAsadRazaDevops
1
@SyedAsadRazaDevops 谢谢您的反馈。我已将您的评论包含在答案中,以增加可见性。 - VonC

10

2
有趣,我需要测试一下。+1 - VonC
2
还必须将私钥与用户www-data共享才能使其工作。 - Mr Coder
最佳和快速的解决方案。 - umefarooq

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