Git 无法签出具有只读权限的文件

Git cannot checkout files with readonly permissions

我在使用 git 存储库时遇到了一些问题,其中有一些文件处于只读模式 (chmod 0440)。

有时,其中一个文件在另一个分支上被修改;当您尝试签出该分支时,git 无法使用 warning: unable to unlink path/to/the/file: Permission denied

问题是这些文件需要处于只读模式,因为在这些文件之外使用的框架会在这些文件可写时抛出严重的警告消息,而且问题更大,每次我们(重新)安装框架时在我们的持续集成过程中,框架将这些文件更新为只读模式。

我尝试使用 git 钩子在检查任何 file/branch 之前自动将这些文件更改为 0664,然后将它们更改回 0440,但我不确定这样的钩子是否存在。

一个不需要的解决方案是每次我知道这些文件可以用 git 更改时,我自己将这些文件更改为 0664,然后将它们更改回 0440 以避免在生产环境中推送可写文件,但它会肯定会导致失败。

另一个解决方案是在 0664 模式下提交它们并更新我们的持续集成过程以在(重新)安装框架后将这些文件重新更改为 0664 并完全忽略警告;同时将产品环境的 chmod 保持为 0440。

你们如何看待这个问题,我可以解决的最佳解决方案是什么?

听起来您正在尝试使用 Git 作为部署工具。

Git 不是部署工具。最重要的原因之一是,它不跟踪除用户可执行权限之外的权限。如果一个文件是只读的,Git当然不能修改它,因为它是只读的。

也许您应该阅读 http://gitolite.com/deploy.html 以获得一些关于如何围绕 Git 构建部署工具的提示。