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


硬廣:《SVN與TortoiseSVN實戰》系列已經寫了四篇,第二篇《SVN與TortoiseSVN實戰:標簽與分支》和第三篇《SVN與TortoiseSVN實戰:TortoiseSVN新建及合並分支》重點介紹了標簽和分支的概念及實際操作演示,關注人數較多。

上一篇提到關於沖突的知識,其中已經說明了第1點:

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

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

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

SVN是根據同時對相同位置上內容的修改來判斷沖突的,這是核心的一點,下面說明2、3點。

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


 在簽出文件時,當本地文件的修改與其他人簽入的修改產生沖突時,會產生三個沖突文件,如下圖:

 我們在沖突的文件上點擊右鍵,使用TortoiseSVN的Show log查看下沖突文件的修改日志:

先補充一點,SVN的Revision是基於整個項目的,而不像有些版本控制程序針對於每個文件有自己的Revison,SVN每一次簽入都會遞增,一個Revision下可能包含多個文件的修改。

對比這Show log出來日志,我們來說下這三個文件的含義:

新建文本文檔.txt.r96:96就是版本號,是你本次修改前的初始版本,也就是說你是基於這個版本修改的,如果你Revert本次修改,那本地會退回到這個文件的內容;

新建文本文檔.txt.r97:97也是版本號,是別人在你簽入前簽入后生成的版本;

新建文本文檔.txt.mine:是你修改后准備提交的那個版本,也就是在沖突產生前你修改的新建文本文檔.txt的內容;

那這時的新建文本文檔.txt的內容是什么呢?

打開后可以看到SVN已經修改了這個文件,使用<<<<<<< >>>>>>> 標明了發生沖突的地方,基於以上對三個文件的理解,大家應該能容易明白SVN的標記的方法了吧:

<<<<<<< .mine 和 ======= 之間是你修改的內容;

======= 和 >>>>>>> .r97 之間是別人最新簽入的內容;

通過Show log查看別人簽入時標注的注釋,決定采用誰的代碼,然后刪除掉<<<<<、======、>>>>>和多余的代碼來解決沖突。

最后強調一下 .mine 在SVN中代表自己的修改。

怎樣使用TortoiseSVN解決沖突?


 其實理解了SVN的標記方式,在沖突少的情況下手動解決是最方便的。

以下演示在沖突文件上右鍵,選擇TortoiseSVN菜單Edit conficts,使用TortoiseSVN的工具來解決沖突:

相信了解三個沖突文件代表的意義以后,可以很容易了解以上三個區域顯示內容的含義了:

左邊代表別人的修改,右側是自己的修改,底部是合並后的內容;

紅色標記了沖突的行,在別人與自己的沖突行中選擇采用的一行,點擊右鍵Use this text block,就解決了一行沖突。

也可以使用整個文件來解決沖突,右鍵使用Use this whole file。

所有沖突解決完以后,點擊上邊的對號按鈕,標記解決,這時此前的三個文件消失,簽入你的修改。

額外說點什么


 每次簽入把本次修改的原因與注意事項的寫入SVN的備注中是良好的習慣,當產生沖突時可以結合備注來了解修改的原因,對於CodeReview人員來說也是必須的。

SVN服務器可以設置腳本,對於不寫備注的簽入拒絕簽入,設置方法可以自行百度。


 記錄,為更好的自己!


免責聲明!

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



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