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