先來了解下什么是沖突吧。沖突就是代碼 String str="aaaa" 被同時修改,一個要變成String str="bbbb";一個要變成String str="cccc";這就在代碼合并的時候就帶來了沖突。如果代碼合并是從主干rebase到分支,如果出現沖突,都是以主干為準(以保證已有的功能不受到影響),就會出現主干代碼強制覆蓋分支的代碼。出現沖突后有4個文件(以pom.xml文件為例):
1.pom.xml ---------合并后的文件,如果有沖突會有<<<<<<<沖突提示符
2.pom.xml.merge-left.r1298 ---------主干的前一個版本,也就是計算是否有沖突的根文件
3.pom.xml.merge-分支 ---------本地分支的代碼,也就是你要求rebase主干的分支代碼
4.pom.xml.merge-來源.r1313 ---------主干的代碼
有些人認為解決沖突只要看1中的pom.xml中的沖突提示符就夠了。然后對有沖突的地方一一解決就夠了。如下圖:
實際上只是看這個是遠遠不夠的。有這樣的一種情況。String str="aaaa",被同時修改,trunk上已經是String str="bbbb";本地分支又被修改為String str="cccc";另外一個變量 String str2 = "aaaa2";trunk上沒有變化,只是本地分支被修改為了String str2="cccc2";這個時候svn會將這個文件視為有沖突,因為str 即想變為bbbb又想變為cccc,會計算為沖突。但是str2從沖突的定義上來看不是一個沖突,因為只有一個地方修改。svn在代碼合并的時候,發現這個文件有沖突會直接用trunk的內容覆蓋分支的內容,并且將str的地方打上沖突提示符。但是str2的地方就不會打上沖突標識符,因為它不是一個沖突。因此這個文件合并后就是這樣的:
如果只是按照沖突提示符去合并就會出現本地代碼丟失的場景。那么正確的合并沖突解決方法應該是什么呢?應該是根文件(上面提到的pom.xml.merge-left.r1298),分支文件(pom.xml.merge-分支),trunk文件(pom.xml.merge-來源.r1313)進行三方比較。比較工具我使用的是Beyond Compare 3。如下圖所示:
從上圖可以看出,真正出現沖突的是version1會打上沖突提示符,version是直接被trunk的覆蓋。合并后的文件如下圖:
合并沖突的時候應該對這三個文件進行三方比較,具體操作可以使用上面標紅的直接定位。合并的時候一定要清楚那些是需要保留分支的,那些是需要保留主干的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。