阻止Git更改pull的权限

Sim*_*ias 18 git version-control

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

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

但是,虽然filemode设置为false(在本地,全局和用户中),但当我拉动时,write权限会不断变化.

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

谁知道如何实现这一目标?

Von*_*onC 12

一个可能对此有帮助的配置设置,core.sharedRepository在博客文章" 在Collaborative Repository中保留组写Git对象 "中提供:

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

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sharedRepository = group
Run Code Online (Sandbox Code Playgroud)

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

确保你的价值umask:

示例:0660将使repo对所有者和组进行读/写,但对其他人不可访问(相当于组,除非umask是例如0022).

  • 嘿谢谢!我的麻烦不是关于.git/objects,而是文件到repo中,但你对`umask`的评论是正确的.将`umask`设置为'002`默认允许组写访问. (2认同)

Del*_*eet 8

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

sudo -u user command
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可能是:

sudo -u www-data git pull
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这不是一个好的解决方案,因为我们必须一次又一次地做。 (3认同)
  • 有趣。我必须测试一下。+1 (2认同)
  • 还必须与用户www-data共享私钥,此功能才能起作用 (2认同)