揭開SVN沖突神秘面紗
本節講解一下SVN沖突問題,隨著SVN的快速發展,SVN可以再多個操作系統中搭建,這是難免會遇到SVN沖突問題,這些沖突如何解決,本文就為大家一一講解。
1、如何產生SVN沖突
當開發人員A和開發人員B從版本庫同時檢出文檔1.txt,而A和B同時修改了1.txt的同一地方,后提交的一方會在拷貝副本中產生沖突。
兩個工作拷貝,A拷貝中文件1.txt內容為
dfqerq
123dfwre
B拷貝中文件1.txt內容為
dfqerq
123erwrq
在B版本提交之前版本庫上的1.txt(base版本)內容為
dfqerq
B拷貝先提交版本到版本庫中,以至于最新版本內容變為
dfqerq
123erwrq
此時A版本也提交則會產生沖突,無法提交,需要先svnupdate,此時會在A拷貝中產生三個臨時文件1.txt.rNew\1.txt.rOld\1.txt.mine,其中1.txt.rNew是最新版本,1.txt.rOld是base版本,1.txt.mine是A作者修改后的版本,在此例中內容為
dfqerq
123dfwre
而update之后A拷貝中的1.txt內容為
<<<<<<<.mine
dfqerq
123dfwre=======
dfqerq
123erwrq>>>>>>>.r18
其中<<<<<<<.mine與=======之間表示A修改后的內容,=======與>>>>>>>.r18之間是版本服務器上的版本
2、解決SVN沖突
第一種,利用update的選項進行SVN沖突解決,也就是說不管當前拷貝副本是否是最新版本,都使用—accept參數作為沖突處理方式
--acceptARG:specifyautomaticconflictresolutionaction
('postpone','base','mine-conflict',
'theirs-conflict','mine-full','theirs-full',
'edit','launch')
(p)postpone-marktheconflicttoberesolvedlater//讓文件在更新完成之后保持沖突狀態。
(df)diff-full-showallchangesmadetomergedfile//使用標準區別格式顯示base修訂版本和沖突文件本身的區別。
(e)edit-changemergedfileinaneditor//用你喜歡的編輯器打開沖突的文件,編輯器是環境變量EDITOR設置的。
(r)resolved-acceptmergedversionoffile//完成文件編輯之后,通知svn你已經解決了文件的沖突,它必須接受當前的內容—從本質上講就是你已經“解決了”沖突。
(mf)mine-full-acceptmyversionofentirefile(ignoretheirchange//丟棄新從服務器接收的變更,并只使用你查看文件的本地修改。
(tf)theirs-full-accepttheirversionofentirefile(losemychanges)//丟棄你對查看文件的本地修改,只使用從服務器新接收的變更。
(l)launch-launchexternaltooltoresolveconflict//啟動一個外置程序來執行沖突解決,這需要一些預先的準備。
(h)help-showthislist//顯示所有在沖突解決時可能使用的命令。
第二種,在update時并不處理SVN沖突,利用svnresolve解決沖突
1、利用svnresolve--acceptbase選擇base版本,即1.txt.rOld作為最后提交的版本
--acceptARG:specifyautomaticconflictresolutionsource
('base','working','mine-conflict',
'theirs-conflict','mine-full','theirs-full')
2、手工修改1.txt文件,然后將當前拷貝即1.txt作為最后提交的版本
svnresolve--acceptworking1.txt
3、svnresolve--accepttheirs-full1.txt使用1.txt.rNew作為最后提交的版本
4、svnresolve--acceptmine-full1.txt使用1.txt.mine作為最后提交的版本
5、svnresolve--acceptmine-conflict1.txt使用1.txt.mine的沖突部分作為最后提交的版本
5、svnresolve--accepttheirs-conflict1.txt使用1.txt.rNew的沖突部分作為最后提交的版本。本節關于SVN沖突問題介紹完畢。
【編輯推薦】