Git 在冲突期间使用正则表达式自动合并不重要的差异?

问题描述

我们有一个文件通常是自动生成的,因此它在文件的开头有一个注释,表明文件生成的日期,即:

// generation date 01/10/2020

当我们使用 git rebase 时,在修改了这个自动生成文件的两个分支之间(手动更改,或者重新生成文件),即使两个分支之间文件的所有内容都是相同的——除了特定的文件开头的日期注释——git把这个​​标记为冲突,真的很烦人(因为这样的文件很多,不止一个)。

我想让 git automerge 这个特定的冲突。 也许通过提供某个正则表达式,如果冲突与正则表达式匹配,git 可以采用另一个分支的版本(因为我们并不真正关心合并期间的日期)。

我知道我们无法生成评论 - 然后避免将来发生冲突,但我们希望保留日期评论

我们使用不同的工具进行合并,因此我们更喜欢 git 解决方案,而不是特定于工具的解决方案。

对如何解决我们的问题有任何想法吗?

谢谢。

解决方法

没有内置的解决方案。

使用 Git 直接提供的最接近的方法是编写一个合并驱动程序。合并驱动程序接受三个输入文件——合并基础文件和另外两个文件——并产生合并结果。您可以通过以下方式执行此操作:

  • 读取三个输入文件;
  • 使用您的正则表达式(或其他)来识别您想要自动合并的行;
  • 删除或替换那些行——这是棘手的部分——并使用 git merge-file 合并剩余的行;和
  • git merge-file 的结果中的适当位置重新插入自动生成的合并。

您的退出状态,从这个驱动程序,应该是 git merge-file 的退出状态(它已经是零或非零),或者如果您希望自己的自动合并被视为冲突,则强制为非零.

有关编写合并驱动程序的详细信息,请参阅 the gitattributes documentation