我该如何预防.git/index
从不断改变其权限和所有权?
我跑ls -al .git/index
并看到该文件归root所有。
我用 sudo chown -R $USER:USER
更改权限和 sudo chmod -R 775 .git
我什至尝试使用 rm -rf .git/index.lock
删除锁定文件
权限更新,但几分钟后它们又变回由 root 和 740 拥有,这破坏了我正在尝试的 git 命令。
我通过 Ansible 设置了全局 git 配置,所以我想知道这是否搞砸了?是否有我需要修改的全局文件?
最佳答案
当 Git 写入索引时,它这样做的方式是创建一个名为 .git/index.lock
的新文件。 (使用 O_EXCL
),根据 core.sharedRepository
调整其权限,然后将其重命名为顶部。 Git 不提供就地重写文件的方法。
如果创建此文件以使其归 root 所有,则 root 正在创建该文件,因为它正在更新索引。这可能意味着 root 拥有的某个进程正在修改工作树。
如果这不是您的意图,那么最好的办法是找到该进程并阻止它修改工作树。多个用户修改同一个工作树不是一个好主意,如果您的 root 拥有的进程正在从工作树中读取文件并与另一个用户共享,则可能导致安全漏洞。
如果您确定您正在做的事情是安全的,并且您想修改 .git
中的哪些文件的权限目录已创建,您可以使用 core.sharedRepository
设置它们。例如,您可以使用值 0664
.请注意,Git 将自动处理可执行位,并且不应将索引标记为可执行。
如果您想始终对存储库使用相同的组,您可以在存储库中的所有目录上设置 setgid 位,然后将它们的组设置为适当的值。假设您还设置了 core.sharedRepository
设置为使事物组可写的值,然后您可以使用该组中的任何用户修改存储库,并且事物应该可以工作。请注意,如果其中一个或多个用户不受信任或权限较低,这可能仍会产生安全隐患,因此您应该小心。
关于bash - 阻止 .git/index 更改其权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68353617/