5

好的,这是我的问题。“git rerere”是否比较两个文件的哈希值以找出分辨率?也就是说,假设我有一个包含此标记的 XML 文件:

<number>12</number>

当我遇到冲突时,该数字通常会更改为 13、14 等,所以我坚持:

<<<<<<<
<number>12</number>
=======
<number>13</number>
>>>>>>>

即使数字与上次不同,rerere 是否可以自动解决此冲突?我总是希望它以采用更高数字的方式解决它(在上面的示例中,13)。那么如果它记录了数字 12 和 13 的分辨率,它会解决与不同数字的冲突吗?我怀疑它不会,但不妨问问。

4

2 回答 2

7

即使数字与上次不同,rerere 是否可以自动解决此冲突?我总是希望它以采用更高数字的方式解决它(在上面的示例中,13)。

不,git rerere不能那样做。

当你使用 时git rerere,你要求它记住两件事:

  • 一个特定的冲突(即,有冲突的大块头的文字文本和它们所在的文件);和
  • 应该适用于该冲突的解决方案

因为这些是大块文字(例如“用 13 替换 12”)而不是某种转换函数(例如“用 N + 1 替换 N”),所以 git 无法推断您想要用更高的数字替换每个数字。

如果 git 稍后遇到与其先前记住的任何冲突都不匹配的冲突,就好像它根本没有遇到过该冲突,即使它可能是相似的(如在您的示例中,数字始终为一个)。

如果此 XML 文件是自动生成的,则可能有一种方法。在这种情况下,您可能需要考虑根本不将其保留在源代码管理中,而是在运行时生成它。那么你将永远不会有相应的冲突需要清理。

另一种方法是完全避免git rerere,而是编写一个自定义合并驱动程序来为您解决问题。我以前做过这个,但这是一项非常重要的工作,它需要你编写和测试一些代码。如果您对此策略感兴趣,请参阅Karl 的回答的链接

于 2012-04-21T18:19:00.590 回答
2

Vanilla git 不会那样比较文件。它进行严格的字符串比较,并且对它的语义一无所知。

但是,请查看gitattributes 手册页中的“定义自定义合并驱动程序” 。它允许您编写自己的程序以任何您想要的方式解决某些合并,包括选择更高的数字。

于 2012-04-21T22:05:26.320 回答