使 git 仅跟踪文件中的某些行

Make git track only certain lines in a file

我对 git 属性感到困惑。

我不确定我正在尝试做的事情是否可行:我有一个设置文件,我的 IDE 正在为我的项目生成该文件并且该文件经常更新。它基本上是一个文本文件,但建议不要在文本模式下编辑它。我允许自己添加和编辑文件的某些部分,但我让 IDE 的 GUI 完成其余部分,否则我可能会遇到问题。

部分文件是GUI改的,部分是我改的。 我希望 git 忽略 GUI 所做的更改或添加的行,但跟踪我所做的更改。

我可以适应图形用户界面的变化,反之亦然。例如,下面的命令可以只打印我想告诉 git 跟踪的行:

egrep -v (WORDS|THAT|APPEAR|IN|LINES|I|DON'T|WANT|GIT|TO|TRACK) <setting-file>

我遇到了 gitattributes here and here。所以我用上面的命令创建了一个过滤器,我把它放在我的 ~/.gitconfig 中的 smudgeclean 中。我设法让它工作,但 问题是 :我不希望 git 实际删除未通过过滤器的行。我只想 git 忽略对这些行的任何更改。

希望我说清楚了。

不,Git 不能那样做。

如果您的 IDE 的配置格式支持包含文件,您可以将您想要的设置拆分到一个单独的文件中(由 Git 跟踪)并将其包含到主配置中(你应该添加到 .gitignore 这样它就不会打扰你。)

如果没有,您仍然可以找到一种方法来偷偷设置而不跟踪主要配置。例如,如果你想强制执行代码样式设置,你应该尝试 .editorconfig.

这就是自动化所能达到的极限。 @jthill 还建议了一种半手动方法,您可以在其中编写一个脚本来更改您想要的设置,但您必须记住在适当的时候 运行 它。

(请注意:存储 IDE 或编辑器文件——为 .editorconfig 保存——在任何具有多个 developer/machine 的项目中被认为是一种不好的做法。冲突几乎不可避免,即使你只有两台机器,你也可能会遇到它们——安装路径等差异可能会渗透到配置中,让你的生活变得一团糟,每次你在另一台机器上提交配置时都会破坏一台机器上的构建。 )