硬廣:《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服務器可以設置腳本,對於不寫備注的簽入拒絕簽入,設置方法可以自行百度。
記錄,為更好的自己!