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

标签 git file-permissions readonly

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

有时,其中一个文件会在另一个分支上被修改;当您尝试 checkout 该分支时,git 无法使用以下命令更新该文件 警告:无法取消链接路径/到/文件:权限被拒绝

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

我尝试使用 git hooks 在 checkout 任何文件/分支之前自动 chmod 这些文件到 0664,然后将它们 chmod 回 0440,但我不确定这样的钩子(Hook)是否存在。

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

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

你们觉得这个问题怎么样?我可以解决这个问题的最佳解决方案是什么?

最佳答案

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

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

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

关于Git 无法 checkout 具有只读权限的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44591128/

相关文章:

git - 如何使用 GitHub API 进行快进 merge ?

git - 如何将本地 Git 分支推送到远程的 master 分支?

git - 如何放弃对分支所做的所有更改?

macos - 在 Mac 上使用 compass 的权限问题

Git post-receive hook 不会从 master 中删除已删除的文件

linux - 为什么 do_execve() 会分两步而不是一步执行可执行验证检查?

mongodb - 文件存储+权限 : mongodb vs filesystem approach

Java/Hibernate - 只读模式下不允许写操作

具有一些只读行的 WPF Datagrid

ios - 如何以只读方式设置 UICollectionViewCell 的属性