防止 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-data
being the apache default user on Ubuntu at least.
这可以防止权限更改。我在更新我的 VPS 上的 git 存储库时使用它,同时将文件权限设置为网络服务器用户。
【讨论】:
有趣。我得测试一下。 +1 还必须与用户 www-data 共享私钥才能正常工作 最佳和快速的解决方案。以上是关于防止 Git 在拉取时更改权限的主要内容,如果未能解决你的问题,请参考以下文章