2017-06-16 66 views
2

我有一些git仓库有一些文件在只读模式(chmod 0440)的麻烦。Git无法签出只读权限的文件

有时,其中一个文件会在另一个分支上被修改;当你尝试检出该分支,git的更新失败有 warning: unable to unlink path/to/the/file: Permission denied

的问题是,这些文件需要在只读模式,因为使用超出这些文件的框架抛出沉重的警告信息时,这些文件的文件是可写的,甚至更成问题,每当我们在我们的持续集成过程中(重新)安装框架时,框架将这些文件更新为只读模式。

我试图使用git挂钩在检出任何文件/分支之前自动将这些文件chmod改为0664,然后将它们chmod重新设置为0440,但我不确定存在这样的挂钩。

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

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

你们对这个问题有什么看法?我可以解决这个问题的最佳解决方案是什么?

+1

但是....你如何期望覆盖只读文件?我不确定你期望GIT在这里做什么。使文件可写或不更新。在我看来,你的实际问题是*,因为超出这些文件使用的框架会在这些文件可写*时引发严重的警告消息。这似乎意味着你不应该将这些文件检查为GIT,当然也不应该更新它们 – Liam

回答

2

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

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

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