2012-04-18 28 views
5

好的,這裏是我的問:「git rerere」比較兩個文件的哈希來計算出分辨率嗎?也就是說,說我有一個包含此標記的XML文件:git rerere如何找出兩次衝突之間的相似之處?

<number>12</number> 

當我有衝突,這個數字通常被更改爲類似13,14,等等,所以我堅持用:

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

即使數字與上次不一樣,也可以自動解決這個衝突嗎?我總是希望它以這樣一種方式來解決它,它需要更高的數字(例如上面的13)。因此,如果它記錄了數字12和13的分辨率,它會解決與不同數字的衝突嗎?我懷疑它不會,但不妨問一下。

回答

7

即使數字與上次不一致,也可以自動解決此衝突嗎?我總是希望它以這樣一種方式來解決它,它需要更高的數字(例如上面的13)。

不,git rerere不能這樣做。

當您使用git rerere,你問的是要記住兩兩件事:

  • 一個具體的衝突(也就是,這是衝突的帥哥的文字文本和他們所在的文件);和
  • 因爲這些是大塊文字(例如,「替換12與13」),其應被應用到衝突

分辨率,而不是某種變換函數(例如,「與N +代替n 1「),git無法推斷你想用一個更高的數字替換每個數字。

如果git後來遇到與其先前記憶的衝突不匹配的衝突,就好像它從來沒有遇到過沖突一樣,即使它可能是相似的(就像在你的例子中數字總是一樣一個)。

如果自動生成此XML文件,則可能有一種解決方法。在這種情況下,您可能會考慮不將它保存在源代碼控制中,而是在運行時生成它。那麼你永遠不會有相應的衝突來清理。

另一種方法是完全避免git rerere,而是編寫一個自定義合併驅動程序,爲您解決問題。我之前已經完成了這個工作,但這是一項不重要的工作,它需要你編寫和測試一些代碼。如果您對此策略感興趣,請參閱the link,地址爲Karl's answer

+0

啊,這麼想。感謝您的深入解答。不幸的是,這些數字總是由人類輸入,所以看起來我會看看這個自定義合併驅動程序。謝謝你的提示,你和卡爾。 – mart1n 2012-04-22 09:39:33

2

Vanilla git不會比較文件的方式。它進行了嚴格的字符串比較,並不知道它的語義。

但是,請查看gitattributes man page中的「定義自定義合併驅動程序」。它可以讓你編寫自己的程序,以任何你想要的方式解決某些合併,包括選擇更高的數字。