西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識(shí) → svn沖突問題詳解 SVN版本沖突解決詳解

svn沖突問題詳解 SVN版本沖突解決詳解

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2014/11/6 23:47:19字體大小:A-A+

作者:西西點(diǎn)擊:5861次評(píng)論:0次標(biāo)簽: svn

  • 類型:編程輔助大小:18M語言:英文 評(píng)分:4.4
  • 標(biāo)簽:
立即下載

解決版本沖突的命令。在沖突解決之后,需要使用svnresolved來告訴subversion沖突解決,這樣才能提交更新。沖突發(fā)生時(shí),subversion會(huì)在WorkCopy中保存所有的目標(biāo)文件版本(上次更新版本、當(dāng)前獲取的版本,即別人提交的版本、自己更新的版本、目標(biāo)文件。

開發(fā)人員都知道代碼管理工具是開發(fā)中一個(gè)必不可少的工具,這里也不廢話詳細(xì)介紹了。不管你個(gè)人喜歡git還是svn還是其他,但還有一大部分公司在使用svn做代碼管理工具。這里詳細(xì)介紹下SVN提交文件時(shí)沖突問題的解決方式。

假設(shè)A、B兩個(gè)用戶,他們分別從svn服務(wù)器中檢出了test1.txt文件,此時(shí)A、B、服務(wù)器三個(gè)地方的test1.txt的版本都是13(我測試環(huán)境的當(dāng)前svn賦予的版本號(hào))。A、B文件的內(nèi)容如下圖(左A右B):

·

接下來,B用戶添加一句話并提交,內(nèi)容如下:

此時(shí)B用戶和服務(wù)器的test1.txt的版本都變?yōu)?4,只有A用戶的test1.txt的版本還為13。接下來A用戶添加一句“aa”,然后提交

由于A用戶是在13版本上做的修改,而服務(wù)器已經(jīng)是14版本了,所以會(huì)提交失。

接下來就是我們要解決的問題了,解決方法分為以下兩種方式。第一種方式:提交失敗后直接選擇revert,省去了解決沖突問題;第二種方式:提交失敗后選擇更新文件,這時(shí)會(huì)有沖突問題。詳細(xì)介紹如下:

第一種方式:

A放棄自己修改的內(nèi)容,進(jìn)行Revert操作,使其test1.txt成為13版本的最初內(nèi)容。然后update使其test1.txt成為14版本,再在14版本上修改提交。操作如下圖:

==》

   ==>然后再修改提交

第二種方式:

因?yàn)榘姹具^時(shí),提交失敗后。A用戶直接選擇更新操作,結(jié)果如下圖所見

(這里聲明下,不要被文件顯示的圖標(biāo)所迷惑,這是其他軟件對(duì)它做了關(guān)聯(lián)導(dǎo)致的,沒啥影響)

這里詳細(xì)說一下產(chǎn)生沖突后的這幾個(gè)文件,:

test1.txt.mine---這個(gè)文件是A用戶在13版本中做了修改要提交的文件。它的內(nèi)容是:13版本內(nèi)容+A用戶的修改

test1.txt.r13----這個(gè)文件是A用戶最初的13版本的test1.txt。它的內(nèi)容是:13版本內(nèi)容

test1.txt.r14----這個(gè)文件時(shí)svn服務(wù)器中test1.txt的最新版本,這里既是B用戶提交后的14版本。它的內(nèi)容是:13版本內(nèi)容+B用戶的修改

test1.txt--------由于A用戶選擇了直接更新,此文件就是svn將 最新版本14 與 A用戶的修改 合并后的文件。它的內(nèi)容如下:

接下來說一下如何解決。對(duì)于源代碼文件或其他的純文本文件,我們可以將上圖的A用戶test1.txt的內(nèi)容整理下,使其滿足條件,然后 選擇,這時(shí)test.txt.mine、test1.txt.r13、test1.text.r14將會(huì)消失。用戶A就可以順利提交了。但是,如果test1.txt是一個(gè)非純文本文件,比如excel,這時(shí)的test1.txt將沒法手動(dòng)合并了,不得不放棄自己的修改?梢栽趖est1.txt上右鍵選擇消除掉test.txt.mine、test1.txt.r13、test1.text.r14這三個(gè)文件。(點(diǎn)擊Resolve不會(huì)更改test1.txt以及服務(wù)器端的內(nèi)容,僅僅是消除了那幾個(gè)文件。)此時(shí)的test1.txt文件是可以提交的,它對(duì)應(yīng)的是服務(wù)器的最新版本,即14版本(因?yàn)檫@是svn將服務(wù)器最新版本14和A用戶修改內(nèi)容合并后的結(jié)果)。但這是svn幫我們合并的,是不合法的文件。我們可以右鍵然后選擇,然后test1.txt就會(huì)變成14版本,A用戶的修改沒有了,A、B、服務(wù)器的test1.txt都成為了14版本。如下圖:

接下來A用戶就可以再進(jìn)行修改提交了。

總結(jié)

對(duì)于純文本文件因版本過時(shí)提交失敗的情況,我們可以選擇更新一下,然后打開”自己的修改和服務(wù)器最新版合并“后的文件(如上文發(fā)生沖突時(shí)的test1.txt文件),進(jìn)行手動(dòng)合并,處理好后選擇resolve然后提交。

對(duì)于非純文本文件因版本過時(shí)提交失敗時(shí),我們只能犧牲一下自己,選擇,然后更新到服務(wù)器最新版本,再修改提交

例如,如果sally修改了一個(gè)文件sandwich.txt,而harry也剛剛修改了這個(gè)文件的相同位置并提交到服務(wù)器。那么sally在做這個(gè)文件的update操作的時(shí)候會(huì)得到三個(gè)額外的文件sandwich.txt.mine、sandwich.txt.r1、sandwich.txt.r2。并且在提交的時(shí)候會(huì)遭到服務(wù)器的拒絕,因?yàn)檫@個(gè)文件的沖突問題還沒有得到解決。要解決這個(gè)沖突,可以選擇:
a.手工合并SVN沖突文件(檢查和修改文件中的沖突標(biāo)志)。
b.用一個(gè)臨時(shí)文件(三個(gè)中的一個(gè))覆蓋你的工作文件。
c.運(yùn)行svnrevert<filename>來放棄所有的修改。
一旦解決了你的沖突,需要通過命令svnresolved讓subversion知道并刪除三個(gè)臨時(shí)文件。這時(shí)才可以提交。
下面再說說手工合并SVN沖突。開始的時(shí)候讓人覺得害怕,但做一段時(shí)間之后,就覺得不那么煩人了。
看看如下文本:
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<<.mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
GrilledChicken
>>>>>>>.r2
CreoleMustard一連串的大于、小于、等于號(hào)是SVN沖突標(biāo)記,這些數(shù)據(jù)得全部刪除才可以提交。其中,
<<<<<<<.mine
Salami
Mortadella
Prosciutto
=======是你在沖突區(qū)里面做的修改。
Sauerkraut
GrilledChicken
>>>>>>>.r2
是別人在沖突區(qū)做的修改。
在SVN沖突區(qū)中,或許你需要和你的同事溝通來安排沖突區(qū)的文本內(nèi)容,如果是程序代碼,你需要和同事商量一下,中間的這段代碼到底應(yīng)該是什么樣子的。
所有沖突區(qū)得到合理的解決之后,你就可以提交你的文件了。

版本沖突原因:

假設(shè)A、B兩個(gè)用戶都在版本號(hào)為100的時(shí)候,更新了kingtuns.txt這個(gè)文件,A用戶在修改完成之后提交kingtuns.txt到服務(wù)器,這個(gè)時(shí)候提交成功,這個(gè)時(shí)候kingtuns.txt文件的版本號(hào)已經(jīng)變成101了。同時(shí)B用戶在版本號(hào)為100的kingtuns.txt文件上作修改,修改完成之后提交到服務(wù)器時(shí),由于不是在當(dāng)前最新的101版本上作的修改,所以導(dǎo)致提交失敗。

版本沖突現(xiàn)象:

沖突發(fā)生時(shí),subversion會(huì)在當(dāng)前工作目錄中保存所有的目標(biāo)文件版本[上次更新版本、當(dāng)前獲取的版本(即別人提交的版本)、自己更新的版本、目標(biāo)文件]。

假設(shè)文件名是kingtuns.txt

對(duì)應(yīng)的文件名分別是:

kingtuns.txt.r101

kingtuns.txt.r102

kingtuns.txt.mine

kingtuns.txt。同時(shí)在目標(biāo)文件中標(biāo)記來自不同用戶的更改。

版本沖突解決:

場景:

1、現(xiàn)在A、B兩個(gè)用戶都更新kingtuns.txt文件到本地。


2、文檔中原始文件內(nèi)容如下:

3、A用戶修改文件,添加內(nèi)容“A用戶修改內(nèi)容”完成后提交到服務(wù)器

4、B用戶修改文件,添加內(nèi)容“B用戶修改內(nèi)容”完成后提交到服務(wù)器

B用戶提交更新至服務(wù)器時(shí)提示如下:

B用戶將文件提交至服務(wù)器時(shí),提示版本過期:首先應(yīng)該從版本庫更新版本,然后去解決沖突,沖突解決后要執(zhí)行svn resolved(解決),然后在簽入到版本庫。在沖突解決之后,需要使用svn resolved(解決)來告訴subversion沖突解決,這樣才能提交更新。

解決沖突有三種選擇:

A、放棄自己的更新,使用svn revert(回滾),然后提交。在這種方式下不需要使用svn resolved(解決)

B、放棄自己的更新,使用別人的更新。使用最新獲取的版本覆蓋目標(biāo)文件,執(zhí)行resolved filename并提交(選擇文件—右鍵—解決)。

C、手動(dòng)解決:沖突發(fā)生時(shí),通過和其他用戶溝通之后,手動(dòng)更新目標(biāo)文件。然后執(zhí)行resolved filename來解除沖突,最后提交。

解決步驟如下:

1、  在當(dāng)前目錄下執(zhí)行“update”(更新)操作

 

2、  在沖突的文件上(選中文件--右鍵菜單—TortoiseSVN—Edit conflicts(解決沖突)),出現(xiàn)如下窗口

Theirs窗口為服務(wù)器上當(dāng)前最新版本

Mine窗口為本地修改后的版本

Merged窗口為合并后的文件內(nèi)容顯示

     

3、  如果要使用服務(wù)器版本,在Theirs窗口選中差異內(nèi)容,右鍵,選擇Use this text block(使用這段文本塊)。

同理如果要使用本地版本,在協(xié)商后,在Mine窗口右鍵,選擇Use this text block(使用這段文本塊)。

    

4、  修改完成后,保存kingtuns.txt文件內(nèi)容。

5、  在B用戶的沖突目錄下,選中文件--右鍵菜單—TortoiseSVN—Resolved(解決)。會(huì)列出沖突的文件列表,如果確認(rèn)已經(jīng)解決,點(diǎn)OK。

6、  沖突解決

      

7、提交解決沖突后的文件。

 

如何降低沖突解決的復(fù)雜度:

1、當(dāng)文檔編輯完成后,盡快提交,頻繁的提交/更新可以降低在沖突發(fā)生的概率,以及發(fā)生時(shí)解決沖突的復(fù)雜度。

2、在提交時(shí),寫上明確的message,方便以后查找用戶更新的原因,畢竟隨著時(shí)間的推移,對(duì)當(dāng)初更新的原因有可能會(huì)遺忘

3、養(yǎng)成良好的使用習(xí)慣,使用SVN時(shí)每次都是先提交,后更新。每天早上打開后,首先要從版本庫獲取最新版本。每天下班前必須將已經(jīng)編輯過的文檔都提交到版本庫。

    版本控制軟件
    (26)版本控制軟件
    版本控制軟件是軟件開發(fā)者的必備工具,版本控制的作用是追蹤文件的變化,簡單說,就是當(dāng)你出錯(cuò)了,可以很容易地回到?jīng)]出錯(cuò)時(shí)的狀態(tài)。大型的頻繁修改的多人編寫的軟件項(xiàng)目,需要一個(gè)版本控制系統(tǒng)簡稱,行話叫做文件數(shù)據(jù)庫,追蹤文件的變化,避免出現(xiàn)混亂。網(wǎng)上有許多版本控制軟件可供選擇,并且都有詳細(xì)的教程或手冊(cè),這里西西給大家提供了一些比較好用的版本控制軟件下載,推薦有需要的用戶下載使用。...更多>>

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)