1. 程式人生 > >SVN解決沖突

SVN解決沖突

做出 錯誤 sso 管理 img 在一起 字段 resolv term

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 擁有的工作副本中,合並後文件如下所示,


技術分享

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


技術分享

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


技術分享

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


技術分享

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


技術分享

從上圖可以看到,主要有3個子窗口組成,左上Theirs 為SVN版本庫中(也就是qaz

剛才修改提交到SVN的版本),右上 Minewsx (正在提交到SVN發現沖突的他)的工作副本文件,下方為合並他倆的文件後的顯示窗口。

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


技術分享
左上


技術分享
右上


技術分享
下方

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

仔細觀察以上3個窗口,我們發現,28行和29行之間多出來一行,即橙色行,並且TheirsMine 都含有這一行,這個是未沖突前,此行的內容,即剛開始的版本。第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 行,我們都想納入qazwsx 的修改,此時我們在左上窗口選擇,use text block from mine before theirs ,即先用Mine的內容,後面接著用theirs的,選擇後下方窗口合並內容如下,


技術分享

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

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

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

SVN解決沖突