阻止 .git/index 更改其权限

Stop .git/index from changing its permissions

如何防止 .git/index 不断更改其权限和所有权?

I 运行 ls -al .git/index 并看到该文件归 root 所有。 我使用 sudo chown -R $USER:USERsudo chmod -R 775 .git 更改权限 我什至尝试用 rm -rf .git/index.lock

删除锁定文件

权限更新,但几分钟后它们又变回由 root 和 740 拥有,这破坏了我正在尝试的 git 命令。

我通过 Ansible 设置了全局 git 配置,所以我想知道这是否搞砸了?是否有我需要修改的全局文件?

当Git写入索引时,它的做法是新建一个名为.git/index.lock的文件(withO_EXCL),根据[=12=调整其权限],然后在顶部重命名它。 Git 不提供就地重写文件的方法。

如果创建此文件时它归 root 所有,则 root 正在创建该文件,因为它正在更新索引。这可能意味着 root 拥有的某些进程正在修改工作树。

如果这不是您的意图,那么最好的办法是找到该进程并阻止它修改工作树。多个用户修改同一个工作树不是一个好主意,如果 root 拥有的进程正在从工作树中读取文件并与其他用户共享,这可能会导致安全漏洞。

如果您确定您正在做的事情是安全的,并且您想要修改创建 .git 目录中的文件的权限,您可以使用 core.sharedRepository 来设置它们。例如,您可以使用值 0664。请注意 Git 将自动处理可执行位,索引不应标记为可执行。

如果您想始终为您的存储库使用相同的组,您可以在存储库中的所有目录上设置 setgid 位,然后将它们的组设置为适当的值。假设您还将 core.sharedRepository 设置为一个使事物组可写的值,然后您可以使用该组中的任何用户修改存储库,并且一切正常。请注意,如果这些用户中的一个或多个不受信任或权限较低,这可能仍然存在安全隐患,因此您应该小心。