先來了解下什么是沖突吧。沖突就是代碼 String str="aaaa" 被同時修改,一個要變成String str="bbbb";一個要變成String str="cccc";這就在代碼合并的時候就帶來了沖突。如果代碼合并是從主干rebase到分支,如果出現(xiàn)沖突,都是以主干為準(zhǔn)(以保證已有的功能不受到影響),就會出現(xiàn)主干代碼強制覆蓋分支的代碼。出現(xiàn)沖突后有4個文件(以pom.xml文件為例):
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了志丹免費建站歡迎大家使用!
1.pom.xml ---------合并后的文件,如果有沖突會有<<<<<<<沖突提示符
2.pom.xml.merge-left.r1298 ---------主干的前一個版本,也就是計算是否有沖突的根文件
3.pom.xml.merge-分支 ---------本地分支的代碼,也就是你要求rebase主干的分支代碼
4.pom.xml.merge-來源.r1313 ---------主干的代碼
有些人認(rèn)為解決沖突只要看1中的pom.xml中的沖突提示符就夠了。然后對有沖突的地方一一解決就夠了。如下圖:
實際上只是看這個是遠(yuǎn)遠(yuǎn)不夠的。有這樣的一種情況。String str="aaaa",被同時修改,trunk上已經(jīng)是String str="bbbb";本地分支又被修改為String str="cccc";另外一個變量 String str2 = "aaaa2";trunk上沒有變化,只是本地分支被修改為了String str2="cccc2";這個時候svn會將這個文件視為有沖突,因為str 即想變?yōu)閎bbb又想變?yōu)閏ccc,會計算為沖突。但是str2從沖突的定義上來看不是一個沖突,因為只有一個地方修改。svn在代碼合并的時候,發(fā)現(xiàn)這個文件有沖突會直接用trunk的內(nèi)容覆蓋分支的內(nèi)容,并且將str的地方打上沖突提示符。但是str2的地方就不會打上沖突標(biāo)識符,因為它不是一個沖突。因此這個文件合并后就是這樣的:
如果只是按照沖突提示符去合并就會出現(xiàn)本地代碼丟失的場景。那么正確的合并沖突解決方法應(yīng)該是什么呢?應(yīng)該是根文件(上面提到的pom.xml.merge-left.r1298),分支文件(pom.xml.merge-分支),trunk文件(pom.xml.merge-來源.r1313)進(jìn)行三方比較。比較工具我使用的是Beyond Compare 3。如下圖所示:
從上圖可以看出,真正出現(xiàn)沖突的是version1會打上沖突提示符,version是直接被trunk的覆蓋。合并后的文件如下圖:
合并沖突的時候應(yīng)該對這三個文件進(jìn)行三方比較,具體操作可以使用上面標(biāo)紅的直接定位。合并的時候一定要清楚那些是需要保留分支的,那些是需要保留主干的。