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-unchanged
,is not just an unpredictable performance trick。
要取消 --skip-worktree
效果并取消设置标志,请使用 --no-skip-worktree
。
缺点
- 此标志仅用于本地存储库,不能推送到远程。因此,每个需要忽略该文件的克隆都应该手动执行。
- 切换到另一个分支或使用
git pull
时可能会遇到冲突。 (more details)
我的项目中有一个包含数据库设置的文件,我已将其设置为一些默认值。该文件由 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-unchanged
,is not just an unpredictable performance trick。
要取消 --skip-worktree
效果并取消设置标志,请使用 --no-skip-worktree
。
缺点
- 此标志仅用于本地存储库,不能推送到远程。因此,每个需要忽略该文件的克隆都应该手动执行。
- 切换到另一个分支或使用
git pull
时可能会遇到冲突。 (more details)