如何让 git 中的文件默认同步但在提交时被忽略?

How to have a file in git that syncs default but is ignored for commits?

我们有一个文件,其中包含一些对我们的软件有用的调试配置。我们希望这个文件同步到每个开发人员的机器上。但是开发人员可能会修改该文件,我们真的不希望签入特定调试会话的影响。与 git 同步的默认 .ini 文件也会出现类似的问题,但我们希望能够在开发期间修改但不能签入。

我们认为我们可以提交文件一次,然后将其添加到 .gitignore 文件,但这不起作用 -- 文件仍然显示为 git status 中的更改。我们还发现了这些命令:

git update-index --assume-unchanged <file>
git update-index --skip-worktree <file>

但这些必须 运行 在每个开发人员的机器上——他们修改本地状态,而不是签入远程存储库以同步到每台机器的状态。

有什么方法可以让一个文件在其默认状态下签入和同步,但可以在不显示为差异的情况下进行修改?

我能找到的最接近答案的是这个 Ignore a file from future commits but leave that on repo,但这并不能阻止文件在开发人员的机器上看起来像差异。

这在 Git 中是不可能的,至少不是你想要的方式。

答案在the Git FAQ中给出。

How do I ignore changes to a tracked file?

Git doesn’t provide a way to do this.

解决方法是使用不同的文件,例如default.ini.template,并在那里添加您的默认值。然后开发人员需要将文件复制到其真实名称default.ini。因为你很可能会使用构建自动化工具(make,gradle,maven),你可以在那里添加一个任务来为你执行复制,或者向需要执行一次的 repo 添加一个简单的脚本开发者