2013-12-19 89 views
1

我剛剛讀了http://www.draconianoverlord.com/2013/09/07/no-cherry-picking.html,似乎svn:mergeinfo可以跟蹤櫻桃採摘時發生的單個提交合並信息。Subversion更擅長櫻桃採摘然後git(或任何DAG VCS)?

當您將您的功能分支與櫻桃選中的錯誤修復程序合併到原始分支(您之前進行錯誤修復的位置)時,可避免合併衝突。

這裏有趣的ASCII藝術(這人喜歡在SO):

 o--o--o--o--o feature 
    ^ ^ \ 
    / /  v 
-o--o--o--X--o---o---Y--o--> dev 

這裏X - 只有單一變更(必備/攔截修復,我們從移動到dev分支feature)。

我試着發現GitY合併中有衝突,如果你在修改X已經影響到的行進行了修改。而SVN只是從合併中跳過該變更集。

UPDATE這導致DAG VCS用戶使用bisect和對等和分支的共同祖先進行修復傳播。所以你可以創造清潔的歷史。

回答

2

您可能想要read up on rerere,這是「重新使用記錄的分辨率」的縮寫。 Git可以記住過去是如何解決衝突並在以後重用這些解決方案的,但您必須啓用該功能。

git config rerere.enabled true將在您的存儲庫中啓用此功能(如果您希望在此計算機上爲此用戶默認啓用此功能,請使用--global)。

+1

我不喜歡'rerere'就好像我在合併解決方案中犯了一個錯誤,很難把它弄清楚,因爲它認爲它知道我想要它做什麼。 – cforbish

+1

必要時,您可以使用'rerere forget [path]'和'rerere clear'來解決高速緩存的分辨率問題。 – Chris

+0

@Chris哇!一些新的知道。 +1 – gavenkoa