svn 沖突的產(chǎn)生與解決_第1頁
svn 沖突的產(chǎn)生與解決_第2頁
svn 沖突的產(chǎn)生與解決_第3頁
svn 沖突的產(chǎn)生與解決_第4頁
svn 沖突的產(chǎn)生與解決_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——svn沖突的產(chǎn)生與解決svn沖突的產(chǎn)生與解決

1、如何產(chǎn)生沖突

當開發(fā)人員A和開發(fā)人員B從版本庫同時檢出文檔1.txt,而A和B同時修改了1.txt的同一地方,后提交的一方會在拷貝副本中產(chǎn)生沖突。兩個工作拷貝,A拷貝中文件1.txt內(nèi)容為dfqerq123dfwre

B拷貝中文件1.txt內(nèi)容為dfqerq123erwrq

在B版本提交之前版本庫上的1.txt(base版本)內(nèi)容為dfqerq

B拷貝先提交版本到版本庫中,以至于最新版本內(nèi)容變?yōu)閐fqerq123erwrq

此時A版本也提交則會產(chǎn)生沖突,無法提交,需要先svnupdate,此時會在A拷貝中產(chǎn)生三個臨時文件1.txt.rNew\\1.txt.rOld\\1.txt.mine,其中1.txt.rNew是最新版本,1.txt.rOld是base版本,1.txt.mine是A修改后的版本,在此例中內(nèi)容為dfqerq123dfwre

而update之后A拷貝中的1.txt內(nèi)容為>>>>>>.r18

其中>>>>>>.r18之間是版本服務(wù)器上的版本

2、解決沖突

第一種,利用update的選項進行沖突解決,也就是說不管當前拷貝副本是否是最新版本,都使用—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//使用標準區(qū)別格式顯示base修訂版本和沖突文件本身的區(qū)別。

(e)edit–changemergedfileinaneditor//用你喜歡的編輯器開啟沖突的文件,編輯器是環(huán)境變量EDITOR設(shè)置的。

(r)resolved–acceptmergedversionoffile//完成文件編輯之后,通知svn你已經(jīng)解決了文件的沖突,它必需接受當前的內(nèi)容—從本質(zhì)上講就是你已經(jīng)―解決了‖沖突。

(mf)mine-full–acceptmyversionofentirefile(ignoretheirchange//丟棄新從服務(wù)器接收的變更,并只使用你查看文件的本地修改。

(tf)theirs-full–accepttheirversionofentirefile(losemychanges)//丟棄你對查看文件的本地修改,只使用從服務(wù)器新接收的變更。

(l)launch–launchexternaltooltoresolveconflict//啟動一個外置程序來執(zhí)行沖突解決,這需要一些預(yù)先的準備。

(h)help–showthislist//顯示所有在沖突解決時可能使用的命令。

其次種,在update時并不處理沖突,利用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的沖突部分作為最終提交的版本

第三種,使用svnrevert取消變更

(以上文章來源:/s/blog_65fd4c1e0100h2cg.html)-----

前兩天在解決沖突時用到了svnresolve這個命令,找到這篇文章主要是由于他對–accept參數(shù)的說明比較全

比官方的文檔更詳細。

svn文件沖突,樹沖突詳解

解決沖突

偶爾,當你從版本庫更新、合并文件時,或者切換工作副本至一個不同的URL時你會遇到?jīng)_突。有兩種沖突:

文件沖突

當兩名(或更多)開發(fā)人員修改了同一個文件中相鄰或一致的行時就會發(fā)生文件沖突。

樹沖突

當一名開發(fā)人員移動、重命名、刪除一個文件或文件夾,而另一名開發(fā)人員也對它們進行了移動、重命名、刪除或者僅僅是修改時就會發(fā)生樹沖突。

文件沖突

當兩名或更多開發(fā)人員修改了同一個文件中相鄰或一致的行時就會發(fā)生文件沖突。由于Subversion不知道你的項目的具體狀況,它把解決沖突的工作留給了開發(fā)人員。一旦出現(xiàn)沖突,你就應(yīng)當開啟有問題的文件,查找以字符串>>>>>>版本

對于每個沖突的文件Subversion在你的目錄下放置了三個文件:

文件名.ext.mine

這是你的文件,在你更新你的工作副本之前存在于你的的工作副本中——也就是說,沒有沖突標志。這個文件除了你的最新修改外沒有別的東西。

文件名.ext.r舊版本

這是在你更新你的工作副本之前的基礎(chǔ)版本(BASErevision)文件。也就是說,它是在你做最終修改之前所檢出的文件。

文件名.ext.r新版本

這個文件是當你更新你的工作副本時,你的Subversion客戶端從服務(wù)器接收到的。這個文件對應(yīng)于版本庫中的最新版本。

你可以通過TortoiseSVN→編輯沖突運行外部合并工具/沖突編輯器,或者你可以使用任何別的編輯器手動解決沖突。你需要沖定哪些代碼是需要的,做一些必要的修改然后保存。

然后,執(zhí)行命令TortoiseSVN→已解決并提交人的修改到版本庫。需要注意的是已解決命令并不是真正的解決了沖突,它只是刪除了filename.ext.mine和filename.ext.r*兩個文件,允許你提交修改。

假使你的二進制文件有沖突,Subversion不會試圖合并文件。本地文件保持不變(完全是你最終修改時的樣子),但你會看到filename.ext.r*文件。假使你要撤消你的修改,保存版本庫中的版本,請使用還原(Revert)命令。假使你要保持你的版本覆蓋版本庫中的版本,使用已解決命令,然后提交你的版本。

你可以右擊父文件夾,選擇TortoiseSVN→已解決...,使用―已解決‖命令來解決多個文件。這個操作會出現(xiàn)一個對話框,列出文件夾下所有有沖突的文件,你可以選擇將哪些標記成已解決。

樹沖突

當一名開發(fā)人員移動、重命名、刪除一個文件或文件夾,而另一名開發(fā)人員也對它們進行了移動、重命名、刪除或者僅僅是修改時就會發(fā)生樹沖突。有好多種不同的情形可以導致樹沖突,而且不同的情形需要不同的步驟來解決沖突。

當一個文件通過Subversion在本機刪除后,文件也從本機文件系統(tǒng)中刪除。因此即使它是樹沖突的一部分,卻既不能顯示沖突的疊加圖標也不能通過右鍵單擊來解決沖突。使用檢查修改對話框來獲得編輯沖突選項。

TortoiseSVN能夠協(xié)助找到合并更改的正確位置,但是需要作一些額外的工作來整理沖突。請牢記:當進行一次更新操作后,工作副本的基礎(chǔ)文件將會包括每一個項目在執(zhí)行更新操作時版本庫中的版本。假使你在進行更新后再撤銷更改,工作副本將返回到版本庫的狀態(tài),而不是你開始進行更改前的狀態(tài)。

本地刪除,當更新時有更改進入

1.開發(fā)人員A修改Foo.c并將其提交至版本庫中

2.開發(fā)人員B同時在他的工作副本中將文件Foo.c改名為Bar.c,或者僅僅是刪除了Foo.c或它的父文件夾。

更新開發(fā)人員B的工作副本會導致樹沖突:

??

在工作副本中,F(xiàn)oo.c被刪除了,但是被標記為樹沖突。

假使沖突是由于更改文件名引起的而不是刪除文件引起的,那么Bar.c被標記為添加,但是其中卻不包括開發(fā)人員A修改的內(nèi)容。

開發(fā)人員B現(xiàn)在必需做出選擇是否保存開發(fā)人員A的更改。在更改文件名的案例中,他可以將Foo.c的更改合并到改名后的文件Bar.c中去。對于刪除文件或文件夾的案例中,他可以選擇保存包含開發(fā)人員A更改內(nèi)容的項目并放棄刪除操作?;蚴裁匆膊蛔龆苯訉_突標記為已解決,那樣他實際上丟棄了開發(fā)人員A的更改。

假使TortoiseSVN能夠找到被改名為Bar.c的原始文件,沖突編輯對話框?qū)⒖梢院喜⒏?。這取決于在什么地方調(diào)用更新操作,它可能不能找到原始文件。

本地更改,當更新時有刪除進入

1.開發(fā)人員A將文件Foo.c改名為Bar.c并將其提交至版本庫中。2.開發(fā)人員B在他的工作副本中修改文件Foo.c?;蛘咴谝粋€文件夾改名的案例中...

1.開發(fā)人員A將父文件夾FooFolder改名為BarFolder并將其提交至版本庫中。2.開發(fā)人員B在他的工作副本中修改文件Foo.c。

更新開發(fā)人員B的工作副本會導致樹沖突。對于一個簡單的文件沖突:

??

Bar.c被當作一個正常文件添加到工作副本中。Foo.c被標記為添加(包括其歷史記錄)并且產(chǎn)生樹沖突。

對于一個文件夾沖突:

??

BarFolder被當作一個正常文件夾添加到工作副本中。FooFolder被標記為添加(包括其歷史記錄)并且產(chǎn)生樹沖突。Foo.c被標記為已修改。

開發(fā)人員B現(xiàn)在需要做出決定是否接受開發(fā)人員A作出的結(jié)構(gòu)改變并且合并她的更改到新結(jié)構(gòu)下適當?shù)奈募?,或者直接放棄開發(fā)人員A的更改并保存本地文件。

要合并她的本機更改到新布局中,開發(fā)人員B必需先找出沖突的文件Foo.c經(jīng)過改名/移動后在版本庫中的新文件名是什么??梢允褂萌罩緦υ捒騺硗瓿蛇@個任務(wù)。更改必需要手工合并,由于沒有方法自動的或者簡單的完成此操作。一旦更改移植完畢,沖突的路徑就是多余的并且可以刪除。在此案例中,使用沖突編輯對話框中的刪除按鈕進行清理并將沖突標記為已解決。

假使開發(fā)人員B認為A的更改是錯誤的,那么在沖突編輯對話框中她必需選擇保存按鈕。這樣就會標記沖突的文件/文件夾為已解決,但是需要手工刪除開發(fā)人員A的更改。又是通過日志對話框幫助追蹤哪些文件移動了。

本地刪除,當更新時有刪除進入

1.開發(fā)人員A將文件Foo.c改名為Bar.c并將其提交至版本庫中。

2.開發(fā)人員B將文件Foo.c改名為Bix.c更新開發(fā)人員B的工作副本會導致樹沖突:

???

Bix.c被標記為添加(包括其歷史記錄)。Bar.c被添加到工作副本中,其狀態(tài)為?正常‘。Foo.c被標記為刪除并且產(chǎn)生一個樹沖突。

要解決這個沖突,開發(fā)人員B必需找出沖突的文件Foo.c經(jīng)過改名/移動后在版本庫中的新文件名是什么。可以使用日志對話框來完成這個任務(wù)。

然后,開發(fā)人員B需要決定Foo.c的新文件名中的哪一個需要保存-開發(fā)人員A改的那個還是他自己改的那個。

在開發(fā)人員B手工解決沖突后,使用沖突編輯對話框中的按鈕將樹沖突標記為已解決。

本地缺少,當合并時有更改進入

1.開發(fā)人員A在主干上工作,修改Foo.c并將其提交至版本庫中

2.開發(fā)人員B在分支上工作,將Foo.c改名為Bar.c并將其提交至版本庫中合并開發(fā)人員A的主干更改到開發(fā)人員B的分支工作副本會導致樹沖突:

??

Bar.c已經(jīng)存在于工作副本中,其狀態(tài)為?正?!?。Foo.c被標記為缺少并產(chǎn)生樹沖突。

要解決這個沖突,開發(fā)人員B要在沖突編輯對話框中標記文件為已解決,這樣就會將其從沖突列表中刪除。她接下來需要決定是否將缺少的文件Foo.c從版本庫中復制到工作副本中,是否將開發(fā)人員A的對Foo.c的更改和合并到改名后的Bar.c或者是否通過標記沖突為已解決來忽略更改什么事也不做。注意,假使你將缺少的文件從版本庫中復制到工作副本中然后再標記為已解決,你復制下來的文件將被再次刪除。你必需先解決沖突。

本地更改,當合并時有刪除進入

1.開發(fā)人員A在主干上工作,將Foo.c改名為Bar.c并將其提交至版本庫中2.開發(fā)人員B在分支上工作,修改Foo.c并將其提交至版本庫中

當文件夾改名時有類似的案例,但是在Subversion1.6中還未被識別...

1.開發(fā)人員A在主干上工作,將父文件夾FooFolder改名為BarFolder并將其提交至版本庫中。2.開發(fā)人員B在分支上工作,在她的工作副本中修改Foo.c。合并開發(fā)人員A的主干更改到開發(fā)人員B的分支工作副本會導致樹沖突:

??

Bar.c被標記為添加。

Foo.c被標記為修改并產(chǎn)生樹沖突。

開發(fā)人員B現(xiàn)在需要做出決定是否接受開發(fā)人員A作出的結(jié)構(gòu)改變并且合并她的更改到新結(jié)構(gòu)下適當?shù)奈募?,或者直接放棄開發(fā)人員A的更改并保存本地文件。

要合并她的本機更改到新布局中,開發(fā)人員B必需先找出沖突的文件Foo.c經(jīng)過改名/移動后在版本庫中的新文件名是什么??梢酝ㄟ^適用于合并源碼的日志對話框來完成這個任務(wù)。沖突編輯器僅顯示工作副本的日志由于它不知道將哪個路徑的更改合并進來,所以你需要自己找到它。更改必需要手工合并,由于沒有方法自動的或者簡單的完成此操作。一旦更改移植完畢,沖突的路徑就是多余的并且可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論