【转】SVN冲突出现场景
如今是一個團(tuán)結(jié)協(xié)作的時代,開發(fā)一個系統(tǒng),往往會多人協(xié)作共同完成。版本管理是必不可少的,常用的軟件有Git,SVN等。今天說一下,SVN管理版本時,如果出現(xiàn)沖突后,如何快速解決沖突。
首先說明一個問題,有一種情況無論如何都不會出現(xiàn)沖突。假如有一個叫qaz的程序員,他checkout了版本庫,這樣他擁有了一個工作副本。然后,他修改了某個文件IMRoot.cs,commit到SVN,并且這個文件保證不會有其他人在他們的工作副本修改并提交到SVN。這種情況下,無論qaz?如何修改IMRoot.cs?,在commit時都不會發(fā)生沖突。
以上說了一種不會出現(xiàn)沖突的情況,那么什么應(yīng)用場合可能會出現(xiàn)沖突呢?假如程序員wsx?他會修改文件?IMRoot.cs?并commit 到SVN,此時可能會引發(fā)沖突。
實例分析
下面,我們根據(jù)實際應(yīng)用場合,模擬出現(xiàn)沖突,到如何通過SVN提供的Edit Conflicts?界面,通過顏色標(biāo)識和操作按鈕,快速準(zhǔn)確地合并解決沖突。
開始,IMRoot.cs?文件主題內(nèi)容是這樣的,命名空間為了理解方便省略掉。?
?
qaz?在文件的第14?行做了修改,其他的未作任何改動,并且將修改commit到了SVN。?
?
wsx?在在第19行做了修改,修改如下,?
?
并且在提交前update了(注意因為這個文件已經(jīng)被qaz?做了修改,所以wsx?如果commit前不update,SVN是不允許提交的),然后commit,此時,SVN不會引發(fā)沖突,因為修改不是在同一行。SVN將qaz?的修改合并到了wsx?擁有的工作副本中,合并后文件如下所示,?
?
為了故意引發(fā)沖突,假設(shè)qaz?和?wsx?同時都修改了第29行。前者修改第29行為如下,并且commite?到了SVN中?
?
后者修改也同時修改了這一行,這意味他并沒有update?這個文件,?
?
然后他commit?到SVN時,提示先update?,緊接著出現(xiàn)沖突,如下所示,?
?
此時,找到這個文件,右鍵選擇Edit conflicts?按鈕,彈出編輯沖突的界面,這才到了重點!?
?
從上圖可以看到,主要有3個子窗口組成,左上Theirs?為SVN版本庫中(也就是qaz?剛才修改提交到SVN的版本),右上?Mine?為?wsx?(正在提交到SVN發(fā)現(xiàn)沖突的他)的工作副本文件,下方為合并他倆的文件后的顯示窗口。
以下為這3個窗口的局部視圖,依次為左上,右上,下方,?
?
左上
?
?
?
右上
?
?
下方
?
當(dāng)面對以上3個窗口時,還是容易讓人發(fā)蒙,尤其是文件比較復(fù)雜,沖突一大片,各種顏色摻雜在一起,不知如何下手,害怕把其他文件意外破壞和文件合并錯誤。那么怎么辦呢?我們不妨先從簡單的文件沖突入手,徹底理解各種顏色的含義,沖突行是如何標(biāo)記的,這樣我們才敢大膽地使用這個界面進(jìn)行代碼合并操作,不用擔(dān)心合并后,把別的文件無辜干擾了或者出現(xiàn)合并錯誤的問題。
仔細(xì)觀察以上3個窗口,我們發(fā)現(xiàn),28行和29行之間多出來一行,即橙色行,并且Theirs?和Mine?都含有這一行,這個是未沖突前,此行的內(nèi)容,即剛開始的版本。第29行是爆紅行、沖突行,相應(yīng)字段還是黃色警示,并且在第3個窗口(下方窗口)第29行全是?????這種符號,意味著無法合并他倆對此行的同時修改,需要我們判斷,要么采取Theirs?的,要么采取Mine?的,要么采取上一版本,要么重新商量一個相同的。SVN也提供了幾個方便的右鍵按鈕,提示如何做出這些選擇,?
?
use this text block?: 選取選中行的內(nèi)容?
use this whole file?:選取選中行所在文件的全部內(nèi)容?
use text block from mine before theirs?:先用Mine的內(nèi)容,后面接著用theirs的
假如第29行我們想采用qaz?的修改,那么,我們在左上窗口,選中第29行,右鍵選擇?use this text block?,然后下方的視圖變?yōu)槿缦?#xff0c;?
?
第29行由一行??????變?yōu)樽笊洗翱诘?9行的內(nèi)容,顏色由爆紅變?yōu)榱藴\綠色。這時候注意觀察,在上一行橙色顯示內(nèi)容代表什么意思,注意最左側(cè)有個 “-”提示,代表此行不會納入合并文件中。
假如第29 行,我們都想納入qaz?和wsx?的修改,此時我們在左上窗口選擇,use text block from mine before theirs?,即先用Mine的內(nèi)容,后面接著用theirs的,選擇后下方窗口合并內(nèi)容如下,?
?
可以看到,第29行,先顯示Mine的,然后顯示Theirs的。
這些操作后,我們點擊上方的Mark as Resolved?按鈕,然后保存即可。這樣沖突就被解決掉了。然后wsx?再commit?自己的內(nèi)容到SVN。
沖突深度詳細(xì)解決方案及可能帶來的隱患思考
總結(jié)
以上是生活随笔為你收集整理的【转】SVN冲突出现场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】开源的C# websocket-s
- 下一篇: 【转】ABP源码分析十四:Entity的