Git: 如何忽略对跟踪文件的更改?

Git: How to ignore changes to a tracked file?

我的项目中有一个包含数据库设置的文件,我已将其设置为一些默认值。该文件由 Git 跟踪并签入。由于该文件将在不同的开发人员机器上使用不同的值进行编辑,有没有办法告诉 Git 忽略对此文件的新更改?

我尝试将文件添加到 .gitignore 文件中,但由于文件已被跟踪,因此不会被忽略。这在其他情况下很好,但我想知道我是否可以在这里做些什么?

您可以使用git update-index --assume-unchanged <file>

如果您想再次跟踪它,请使用 git update-index --no-assume-unchanged <file>

我建议以不同于实际预期名称的方式命名受源代码管理的文件。例如,如果文件通常命名为 config.json,则将示例文件命名为 config.json.dist 并提交此文件。然后将 config.json 添加到您的 .gitignore 文件中。您的开发人员只需 cp config.json.dist config.json 克隆后,然后根据需要对其进行编辑,进行后续提交,而不必担心意外更改默认文件或忘记始终打开和关闭某些设置。

您甚至可以编辑代码以首先搜索 config.json,如果不存在,则回退到 config.json.dist。这将允许开发人员在不执行复制步骤的情况下工作。 (这就是 PHPUnit 的工作原理。)

可以使用 git update-index --skip-worktree FILE 来达到这个目的。

它类似于 --assume-unchanged,但不同于 --assume-unchangedis not just an unpredictable performance trick

要取消 --skip-worktree 效果并取消设置标志,请使用 --no-skip-worktree

缺点

  • 此标志仅用于本地存储库,不能推送到远程。因此,每个需要忽略该文件的克隆都应该手动执行。
  • 切换到另一个分支或使用 git pull 时可能会遇到冲突。 (more details)