SVN解決沖突


SVN沖突出現場景

如今是一個團結協作的時代,開發一個系統,往往會多人協作共同完成。版本管理是必不可少的,常用的軟件有Git,SVN等。今天說一下,SVN管理版本時,如果出現沖突后,如何快速解決沖突。

首先說明一個問題,有一種情況無論如何都不會出現沖突。假如有一個叫qaz的程序員,他checkout了版本庫,這樣他擁有了一個工作副本。然后,他修改了某個文件IMRoot.cscommit到SVN,並且這個文件保證不會有其他人在他們的工作副本修改並提交到SVN。這種情況下,無論qaz 如何修改IMRoot.cs ,在commit時都不會發生沖突。

以上說了一種不會出現沖突的情況,那么什么應用場合可能會出現沖突呢?假如程序員wsx 他會修改文件 IMRoot.cs 並commit 到SVN,此時可能會引發沖突。

實例分析

下面,我們根據實際應用場合,模擬出現沖突,到如何通過SVN提供的Edit Conflicts 界面,通過顏色標識和操作按鈕,快速准確地合並解決沖突。

開始,IMRoot.cs 文件主題內容是這樣的,命名空間為了理解方便省略掉。 


這里寫圖片描述

 

qaz 在文件的第14 行做了修改,其他的未作任何改動,並且將修改commit到了SVN。 


這里寫圖片描述

 

wsx 在在第19行做了修改,修改如下, 


這里寫圖片描述

 

並且在提交前update了(注意因為這個文件已經被qaz 做了修改,所以wsx 如果commit前不update,SVN是不允許提交的),然后commit,此時,SVN不會引發沖突,因為修改不是在同一行。SVN將qaz 的修改合並到了wsx 擁有的工作副本中,合並后文件如下所示, 


這里寫圖片描述

 

為了故意引發沖突,假設qaz 和 wsx 同時都修改了第29行。前者修改第29行為如下,並且commite 到了SVN中 


這里寫圖片描述

 

后者修改也同時修改了這一行,這意味他並沒有update 這個文件, 


這里寫圖片描述

 

然后他commit 到SVN時,提示先update ,緊接着出現沖突,如下所示, 


這里寫圖片描述

 

此時,找到這個文件,右鍵選擇Edit conflicts 按鈕,彈出編輯沖突的界面,這才到了重點! 


這里寫圖片描述

 

從上圖可以看到,主要有3個子窗口組成,左上Theirs 為SVN版本庫中(也就是qaz 剛才修改提交到SVN的版本),右上 Mine 為 wsx (正在提交到SVN發現沖突的他)的工作副本文件,下方為合並他倆的文件后的顯示窗口。

以下為這3個窗口的局部視圖,依次為左上,右上,下方, 


這里寫圖片描述 
左上

 

 


這里寫圖片描述 
右上

 

 


這里寫圖片描述
下方

 

當面對以上3個窗口時,還是容易讓人發蒙,尤其是文件比較復雜,沖突一大片,各種顏色摻雜在一起,不知如何下手,害怕把其他文件意外破壞和文件合並錯誤。那么怎么辦呢?我們不妨先從簡單的文件沖突入手,徹底理解各種顏色的含義,沖突行是如何標記的,這樣我們才敢大膽地使用這個界面進行代碼合並操作,不用擔心合並后,把別的文件無辜干擾了或者出現合並錯誤的問題。

仔細觀察以上3個窗口,我們發現,28行和29行之間多出來一行,即橙色行,並且Theirs 和Mine 都含有這一行,這個是未沖突前,此行的內容,即剛開始的版本。第29行是爆紅行、沖突行,相應字段還是黃色警示,並且在第3個窗口(下方窗口)第29行全是?????這種符號,意味着無法合並他倆對此行的同時修改,需要我們判斷,要么采取Theirs 的,要么采取Mine 的,要么采取上一版本,要么重新商量一個相同的。SVN也提供了幾個方便的右鍵按鈕,提示如何做出這些選擇, 


這里寫圖片描述

 

use this text block : 選取選中行的內容 
use this whole file :選取選中行所在文件的全部內容 
use text block from mine before theirs :先用Mine的內容,后面接着用theirs的

假如第29行我們想采用qaz 的修改,那么,我們在左上窗口,選中第29行,右鍵選擇 use this text block ,然后下方的視圖變為如下, 


這里寫圖片描述

 

第29行由一行??????變為左上窗口第29行的內容,顏色由爆紅變為了淺綠色。這時候注意觀察,在上一行橙色顯示內容代表什么意思,注意最左側有個 “-”提示,代表此行不會納入合並文件中。

假如第29 行,我們都想納入qaz 和wsx 的修改,此時我們在左上窗口選擇,use text block from mine before theirs ,即先用Mine的內容,后面接着用theirs的,選擇后下方窗口合並內容如下, 


這里寫圖片描述

 

可以看到,第29行,先顯示Mine的,然后顯示Theirs的。

這些操作后,我們點擊上方的Mark as Resolved 按鈕,然后保存即可。這樣沖突就被解決掉了。然后wsx 再commit 自己的內容到SVN。

沖突深度詳細解決方案及可能帶來的隱患思考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM