问题描述
我们有一个文件通常是自动生成的,因此它在文件的开头有一个注释,表明文件生成的日期,即:
// 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。