SVN與TortoiseSVN實戰:沖突詳解(一)


硬廣:《SVN與TortoiseSVN實戰》系列已經寫了三篇,第一篇《SVN與TortoiseSVN實戰:從入門到精通》,第二篇《SVN與TortoiseSVN實戰:標簽與分支》和第三篇《SVN與TortoiseSVN實戰:TortoiseSVN新建及合並分支》重點介紹了標簽和分支的概念及實際操作演示。

在寫到SVN分支合並時,有評論中也提到合並后發生沖突的問題,相信關於沖突的知識也是開發人員的痛點。

關於沖突的知識,重點介紹以下幾個方面:

1、什么情況會產生沖突?

2、沖突發生時產生的三個文件是什么含義?

3、怎樣使用TortoiseSVN解決沖突?

什么情況會產生沖突?


當我第一次使用SVN這類項目管理工具時,心中就有一個疑問:多個人同時編輯一個文件會發生什么情況?

為了模擬這種情況,我通過使用另外一個賬號簽出上一篇中的項目,來模擬多個用戶同時操作的情況(在TortoiseSVN的設置對話框里通過Saved Data可以刪除保存的賬號信息以便重新登錄)。

現在test目錄中新建一個測試文本文件,輸入以下內容並簽入,然后簽出到testother目錄中:

1
2
3
4
5
6

首先編輯test目錄中的測試文本文件,把第一行的1改為11,保存后簽入到SVN:

11
2
3
4
5
6

現在編輯testother目錄中的測試文本文件,把最后一行6改為66,保存后簽入到SVN:

1
2
3
4
5
66

在簽入testother的修改時,會提示我們該文件已過期,需要首先簽出最新版本:

當我們簽出后TortoiseSVN會提示讓我們再次嘗試簽入,這次簽入會成功,在這個過程中沒有發生沖突,testother目錄中的測試文本文件的內容為:

11
2
3
4
5
66

可以看到內容自動合並了來自兩個目錄下的修改,那什么情況下會產生讓人頭疼的沖突呢?

上面的操作之所以沒有產生沖突,是因為兩個目錄中對文件內容的修改沒有在同一個位置,如果在testother目錄中對第一行進行修改(比如不修改6,而把1改為111),就會產生沖突。

可能有人看到這里就會想到以下這種情況,還是在test目錄中修改1為11:

11
2
3
4
5
6

在testother中的第一行前新建一行,修改為:

0
1
2
3
4
5
6

這種情況會產生沖突嗎?

結果是:會。

這是因為SVN並沒有那么智能,認為你是新建了一行,SVN對於沖突的判斷關鍵在於對相同位置上內容的修改,所以當你新建一行時就改動了所有后邊的位置。

了解了這些大家基本對SVN沖突產生的原理應該認識的非常透徹了。

關於沖突的其他幾個問題稍后講解,一篇沒有辦法寫的太詳細。


記錄,為更好的自己!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM