SVN解決衝突

SVN衝突出現場景

現在是一個團結協做的時代,開發一個系統,每每會多人協做共同完成。版本管理是必不可少的,經常使用的軟件有Git,SVN等。今天說一下,SVN管理版本時,若是出現衝突後,如何快速解決衝突。git

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

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

實例分析

下面,咱們根據實際應用場合,模擬出現衝突,到如何經過SVN提供的Edit Conflicts 界面,經過顏色標識和操做按鈕,快速準確地合併解決衝突。this

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


這裏寫圖片描述

 

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


這裏寫圖片描述

 

wsx 在在第19行作了修改,修改以下, 圖片


這裏寫圖片描述

 

而且在提交前update了(注意由於這個文件已經被qaz 作了修改,因此wsx 若是commit前不update,SVN是不容許提交的),而後commit,此時,SVN不會引起衝突,由於修改不是在同一行。SVN將qaz 的修改合併到了wsx 擁有的工做副本中,合併後文件以下所示, 開發


這裏寫圖片描述

 

爲了故意引起衝突,假設qaz 和 wsx 同時都修改了第29行。前者修改第29行爲以下,而且commite 到了SVN中 get


這裏寫圖片描述

 

後者修改也同時修改了這一行,這意味他並無update 這個文件, it


這裏寫圖片描述

 

而後他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。

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

相關文章
相關標籤/搜索