SVN版本衝突解決詳解

版本衝突緣由: 服務器

假設AB兩個用戶都在版本號爲100的時候,更新了kingtuns.txt這個文件,A用戶在修改完成以後提交kingtuns.txt到服務器,這個時候提交成功,這個時候kingtuns.txt文件的版本號已經變成101了。同時B用戶在版本號爲100kingtuns.txt文件上做修改,修改完成以後提交到服務器時,因爲不是在當前最新的101版本上做的修改,因此致使提交失敗。 svn

 

版本衝突現象: this

衝突發生時,subversion會在當前工做目錄中保存全部的目標文件版本[上次更新版本、當前獲取的版本(即別人提交的版本)、本身更新的版本、目標文件] spa

假設文件名是kingtuns.txt orm

對應的文件名分別是: 文檔

kingtuns.txt.r101 it

kingtuns.txt.r102 io

kingtuns.txt.mine date

kingtuns.txt。同時在目標文件中標記來自不一樣用戶的更改。 file

 

版本衝突解決:

場景:

1、如今AB兩個用戶都更新kingtuns.txt文件到本地。

1

 

2、文檔中原始文件內容以下:

2

 

 

3A用戶修改文件,添加內容「A用戶修改內容」完成後提交到服務器

3

4

 

 

 

4B用戶修改文件,添加內容「B用戶修改內容」完成後提交到服務器

5

 

B用戶提交更新至服務器時提示以下:

6

 

B用戶將文件提交至服務器時,提示版本過時:首先應該從版本庫更新版本,而後去解決衝突,衝突解決後要執行svn resolved(解決),而後在簽入到版本庫。在衝突解決以後,須要使用svn resolved(解決)來告訴subversion衝突解決,這樣才能提交更新。

 

解決衝突有三種選擇:

 

A、放棄本身的更新,使用svn revert(回滾),而後提交。在這種方式下不須要使用svn resolved(解決)

 

B、放棄本身的更新,使用別人的更新。使用最新獲取的版本覆蓋目標文件,執行resolved filename並提交(選擇文件右鍵解決)

 

C、手動解決:衝突發生時,經過和其餘用戶溝通以後,手動更新目標文件。而後執行resolved filename來解除衝突,最後提交。

 

解決步驟以下:

一、  在當前目錄下執行「update」(更新)操做

 

 7

二、  在衝突的文件上(選中文件--右鍵菜單—TortoiseSVN—Edit conflicts(解決衝突)),出現以下窗口

 

Theirs窗口爲服務器上當前最新版本

Mine窗口爲本地修改後的版本

Merged窗口爲合併後的文件內容顯示

     8

三、  若是要使用服務器版本,在Theirs窗口選中差別內容,右鍵,選擇Use this text block(使用這段文本塊)。

同理若是要使用本地版本,在協商後,在Mine窗口右鍵,選擇Use this text block(使用這段文本塊)。

 

    9

四、  修改完成後,保存kingtuns.txt文件內容。

 

五、  B用戶的衝突目錄下,選中文件--右鍵菜單—TortoiseSVN—Resolved(解決)。會列出衝突的文件列表,若是確認已經解決,點OK

10

 

六、  衝突解決

 

      11

7、提交解決衝突後的文件。

 

 12

 

 

如何下降衝突解決的複雜度:

1、當文檔編輯完成後,儘快提交,頻繁的提交/更新能夠下降在衝突發生的機率,以及發生時解決衝突的複雜度。

2、在提交時,寫上明確的message,方便之後查找用戶更新的緣由,畢竟隨着時間的推移,對當初更新的緣由有可能會遺忘

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

相關文章
相關標籤/搜索