好的,这就是我的问题。“git rerere”比较两个文件的哈希来计算分辨率吗?也就是说,我有一个包含此标记的XML文件:
<number>12</number>
当我发生冲突时,这个数字通常会变成13,14等,所以我坚持:
<<<<<<<
<number>12</number>
=======
<number>13</number>
>>>>>>>
即使数字与上次不一样,还是可以重新自动解决此冲突吗?我总是希望它以这样的方式解决它,它需要更高的数字(例如上面的例子,13)。因此,如果它记录了数字12和13的分辨率,它是否会解决与不同数字的冲突?我怀疑它不会,但不妨问。
答案 0 :(得分:7)
即使数字与上次不一样,还是可以重新自动解决此冲突吗?我总是希望它能够以更高的数字(例如上面的例子,13)来解决它。
不,git rerere
不能这样做。
当您使用git rerere
时,您要求它记住两件事:
因为这些是hunk literals (例如“用12替换12”)而不是某种转换函数(例如“用N + 1替换N”),git无法推断出你想用更高的数字替换每个数字。
如果git后来遇到的冲突与之前记忆的任何冲突都不匹配,那就好像从来没有遇到任何冲突,即使它可能是相似的(如你的例子中数字总是一个)关)。
如果自动生成此XML文件,则可以实现一种方法。在这种情况下,您可能想要考虑根本不将它保留在源代码控制中,而是在运行时生成它。那么你永远不会有相应的冲突来清理。
另一种方法是完全避免git rerere
,而是编写一个自定义合并驱动程序,它将为您解决问题。我以前做过这个,但这是一项非常重要的工作,它要求你编写和测试一些代码。如果您对此策略感兴趣,请参阅the link中的Karl's answer。
答案 1 :(得分:2)
Vanilla git不会以这种方式比较文件。它进行了严格的字符串比较,并且对它的语义一无所知。
但是,请查看gitattributes man page中的“定义自定义合并驱动程序”。它允许您编写自己的程序,以任何方式解决某些合并,包括选择更高的数字。