1. 程式人生 > >SVN與TortoiseSVN實戰:TortoiseSVN新建及合並分支

SVN與TortoiseSVN實戰:TortoiseSVN新建及合並分支

文本文件 說明 rep vision pat 更好的自己 行合並 上大 htm

硬廣:《SVN與TortoiseSVN實戰》系列已經寫了兩篇,第一篇《SVN與TortoiseSVN實戰:從入門到精通》,關於分支和標簽的知識介紹可翻閱第二篇《SVN與TortoiseSVN實戰:標簽與分支》,本篇重點通過例子講解TortoiseSVN新建及合並分支的實際操作。

先提示一下,網上大部分關於分支合並的講解都是錯的,對於其他資料請謹慎,本文本著科學嚴謹的精神,確保講解正確。

我這裏已經新建好一個SVN項目倉庫,並按照第二篇介紹的標準項目倉庫的目錄結構新建好trunks、tags、branches三個目錄:

技術分享圖片

下面開始實際操作。

使用TortoiseSVN新建分支


由於這三個目錄是剛建好的,為了更好體現分支的新建及合並對項目中代碼的影響,先偽造點代碼文件。

打開trunks目錄,在trunks目錄下新建兩個文本文件A.java,B.java:

技術分享圖片

打開A.java輸入以下內容:

技術分享圖片

B.java文件可以隨機輸入些,本例中主要用於觀察後續是否變化。

兩個文件編輯完成後使用SVN Commit將更改提交到SVN:

技術分享圖片

下面開始創建分支:

1、在trunks上點擊右鍵,在TortoiseSVN菜單中選擇Branch/Tag;

2、在To path輸入框中輸入新建分支的路徑,一般是:/branches/分支名,也就是相當於分支保存的路徑名;

3、在下面選擇HEAD revision in the repository,為當前SVN中trunks目錄下最新的代碼建立分支,如果需要為制定的revision建立分支,可以進行選擇;

4、點擊OK分支建立完成。

打開branches目錄,發現目錄依然為空,沒有剛才建立的分支,這是因為分支建立的操作是在服務器端完成的,當需要編輯分支時,在branches目錄點擊Update,剛才建立的分支就會下載下來。

建立分支的過程會非常的快,不會因為主幹中的文件多而降低速度,原因後續說明。

使用TortoiseSVN合並分支


第二篇中舉過例子,有可能存在主幹、分支並行開發的情況,下面我們模擬一下。

將剛才新建的分支Update下來,打開分支中的A.java,對其進行編輯如下:

技術分享圖片

在打開trunks主幹中的A.java,對其進行編輯如下:

技術分享圖片

對以上兩個文件的改動基本上模擬了分支、主幹並行的情況,兩個目錄下的同一個文件被分別修改。

將以上兩個文件的改動Commit,下面進行合並操作。

下面開始合並分支到主幹:

1、在trunks上點擊右鍵,在TortoiseSVN菜單中選擇Merge;

2、在彈出的窗口中選擇第二項,可以理解為合並兩個樹;

技術分享圖片

3、在From和To中都選擇要合並的分支目錄;

4、在From的Revision選擇創建分支時的那個Revision,具體就是點擊Show log,選擇最下面那一條;

5、在To的Revision選擇HEAD Revision,也就是最新操作;

技術分享圖片

6、點擊Next,下一個頁面使用默認項,點擊Merge;

技術分享圖片

7、合並完成。

這時候會發現trunks目錄下的文件已被修改,這時候的合並操作是在本地完成的,並沒有提交到SVN,這與分支建立時有區別,請註意。

也就是說如果你在本次合並中發現問題,只需要對trunks目錄Revert,放棄本次合並即可。

可以看一下trunks目錄合並後的A.java文件,大家與前面對照下,已達到我們想要的合並效果:

技術分享圖片

創建分支時發生了什麽


SVN服務器在創建分支時的拷貝是非常有效率的,瞬間就可以完成,並且只需要很少的空間來存儲,所以不需要擔心分支建立過多導致項目倉庫膨脹的問題。

可以理解為SVN在服務器中存儲的是文件的引用,而非物理上的拷貝。

不要多次合並同一個分支到主幹


合並分支有一個原則,就是不要對一個分支多次合並到主幹,雖然你有可能在合並後又對分支進行了修改,之所以這樣說是有原因的。

上面提到在合並分支時,在From的Revision選項中需要選擇合並的其實版本,如果是第一次合並只需要選擇最早的那個版本即可,但如果合並過一次,你真的能記得你上次合並時最後的Revision是多少嗎?

良好的操作是合並後新建分支。

合並主幹到分支


其實合並是個可逆的過程,合並主幹到分支與合並分支到主幹正好是相反的操作,大家如果會了一種另一種應該非常簡單。

這裏我就不演示了,如果真的需要的話可以在博客中評論,大家確實需要的話我會寫出來。


記錄,為更好的自己!

SVN與TortoiseSVN實戰:TortoiseSVN新建及合並分支