首页 > 解决方案 > 将文件提交到 git 但之后不允许更改

问题描述

我有一些 IDE 运行配置文件,我想提交到我的 git 存储库,以便我们的团队可以共享它们。不幸的是,它们稍后可能会被修改以包含私有或安全系统属性。因此,我也想禁止他们在提交后进行更改。最初提交的文件将不包含任何私人、安全或敏感信息。

是否可以将文件永久提交到存储库,并永久禁止修改它们?我知道在本地克隆上执行此操作的临时方法(例如取消跟踪文件),但我希望始终将它们放在远程,只需指示 git 永远不要跟踪任何更改,即使对于新克隆也是如此。

标签: gitgithub

解决方案


是否可以将文件永久提交到存储库,并永久禁止修改它们?

有点。

以下是一些“某种”实现您想要的选项:

  1. 设置开发人员在本地使用的提交挂钩,以防止意外提交该文件。
  2. 结合分支保护在 GitHub 中为该特定文件设置代码所有者规则,以便在修改该文件时只有特定人员才能允许完成 PR。

你不能强迫#1。您可以强制使用 #2,但这不会阻止开发人员不小心将敏感数据推送到共享存储库中。但它至少会阻止它在没有某些人批准的情况下被合并。也许这些的某种组合是最好的。

选择?

另一种方法是尝试完全避免这种情况。实现它的一种方法是拥有一个未跟踪的覆盖/转换文件,并且可以在 .gitignore 文件中。然后你可以拥有:

my-file-base # checked in and tracked like a normal file
my-file-override # Listed in .gitignore

并且读取该文件的“东西”可以检查是否存在,my-file-override如果它存在,它可以my-file-base使用覆盖进行修改,和/或添加新的东西。每个开发人员都可以根据需要进行设置。

边注:

请注意,来自Git 文档的关于update-index

用户经常尝试使用假设不变和跳过工作树位来告诉 Git 忽略对跟踪文件的更改。这不像预期的那样工作,因为 Git 在执行某些操作时可能仍会根据索引检查工作树文件。一般来说,Git 不提供忽略跟踪文件更改的方法,因此建议使用替代解决方案。


推荐阅读