防止 Git 在拉取时更改权限

Posted

技术标签:

【中文标题】防止 Git 在拉取时更改权限【英文标题】:Prevent Git from changing permissions on pull 【发布时间】:2012-09-25 20:30:13 【问题描述】:

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

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

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

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

有人知道如何实现吗?

【问题讨论】:

相关:***.com/questions/2517339/… 【参考方案1】:

可能在这里有帮助的一个配置设置是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 将使所有者和组可读取/写入 repo,但其他人无法访问(等效于组,除非 umask 是例如 0022)。

【讨论】:

另见groups.google.com/forum/?fromgroups=#!topic/repo-discuss/…umask(或serverfault.com/questions/26954/…) 嘿,谢谢!我的麻烦不在于 .git/objects,而在于将文件放入 repo,但您对 umask 的评论是正确的。将umask 设置为002 默认允许组写访问。【参考方案2】:

我使用的解决方案是run the command as the user 拥有你想要保留的权限:

sudo -u user command

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

sudo -u www-data git pull

www-databeing the apache default user on Ubuntu at least.

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

【讨论】:

有趣。我得测试一下。 +1 还必须与用户 www-data 共享私钥才能正常工作 最佳和快速的解决方案。

以上是关于防止 Git 在拉取时更改权限的主要内容,如果未能解决你的问题,请参考以下文章

防止git pull更改文件权限和所有权

在拉取期间解决 Git 合并冲突以支持其更改

如何防止 git 更改文件所有权

Git:区分本地和远程标签

Git-TFS - 如何在拉取请求被批准之前确保分支是最新的?

java开发的话,可以在拉取的代码里开发吗