1. 程式人生 > >svn分支開發與主幹合併(branch & merge)

svn分支開發與主幹合併(branch & merge)

1、本地Repository的建立

repository的建立很簡單,假設我要在D:\TortoiseSVN\TestRepository目錄中建立repository,只需右鍵TestRepository目錄,依次選擇"TortoiseSVN" -> "Create repository here"便完成了repository的建立。

2、Check out

假設要check out到D:\TortoiseSVN\TestSVN,同樣很簡單,在D:\TortoiseSVN目錄下建立TestSVN目錄,然後在該目錄上右鍵,選擇"SVN Check out...",在彈出的視窗中的"URL of repository"中填入"file:///D:/TortoiseSVN/TestRepository",其他預設即可,最後點選ok。

3、trunk建立新專案MyProject

相當簡單就不贅述了,只列出本次操作所作出的修改:

4、建立branch

在/trunk/MyProject目錄上右鍵,依次選擇"TortoiseSVN" -> "Branch/tag...",在彈出視窗的"To URL"中填入分支的地址,在這裡目標revision選擇HEAD revision,如下圖所示,新增log後點擊ok分支便建立了。這個操作速度非常快,新建的branch在repository中其實只是一個指向trunk某個revision的軟連線而已,並沒有真的複製檔案。


5、Check out分支

右鍵TestSVN目錄選擇"TortoiseSVN Update"即可將剛剛建立的分支下載回本地。進入/branches/MyProject目錄下你會發現其檔案結構和/trunk/MyProject一模一樣。

6、branch提交一個新檔案

7、trunk緊接著提交一個修改

8、branch再次提交一個修改

9、將trunk中的修改同步到branch

6-8演示的是branch和trunk在獨立、並行地開發。為了防止在“錯誤”的道路上越走越遠,現在branch意識到是時候和trunk來一次同步了(將trunk合併到branch)。

首先,在本地trunk中先update一下,有衝突的解決衝突,保證trunk和repository已經完全同步,然後在/branches/MyProject上右鍵,依次選擇"TortoiseSVN" -> “Merge...”,在彈出的視窗中選擇第一項"Merge a range of revision",這個型別的Merge已經介紹得很清楚,適用於將某個分支或主線上提交的多個revision間的變化合併到另外一個分支上。


點選next後,出現如下視窗:

由於是要從trunk合併到branch,理所當然這裡的"URL to merge from"應該填trunk的路徑,"Revision range to merge"很好理解,就是你要將trunk的哪些revision所對應的變化合併到branch中,可以是某一連串的revision,比如4-7,15-HEAD,也可以是某個單獨的revision號。由於在r4中,trunk修改了Person.java中的talk()方法,所以這裡的revision只需填4即可。點選next後出現下圖:

在這裡只需保留預設設定即可。在點選Merge按鈕前你可以先Test merge一把,看成功與否,以及merge的詳細資訊。點選Merge按鈕後trunk所做的修改將同步到branch中。

10、提交合並後的branch

至此,branch已經完全和trunk同步,branch和trunk的程式碼相處很融洽,沒有任何衝突,如果branch已經開發結束,那是時候將branch合併回trunk了,當然,如果branch還要繼續開發,那你將不斷地重複6-10這幾個步驟。

11、將branch合併回trunk

在/trunk/MyProject上右鍵(注意是在主線的目錄上右鍵),依次選擇"TortoiseSVN" -> "Merge...",在彈出的視窗中,Merge type選擇第二項"Reintegrate a branch",這種型別的合併適合在分支開發結束後將所有的改動合併回主線。


點選next後出現如下視窗:

在這裡,"From URL"選擇/branches/MyProject,無需選擇revision號,Reintegrate會將branch上所有修改合併到trunk。後面的步驟和上文第9步中的一樣,不再囉嗦了。如無意外,branch將成功合併到trunk,你需要做的只是將合併後的trunk趕緊commit!

12、提交合並後的trunk

合併後的專案上右鍵,Temp -> Commit。

13、刪除branch

如果你認為你新加的功能已經開發完成了,你可以刪除你的分支!

14、檢視log資訊

到這裡,我已經給你演示完了整個過程,不過最後我們還是看看所有的log資訊吧,通過log能發現我們乾的所有事情:

r1-r7正是我上文在乾的事情,從Message中你能發現我對trunk和branch都幹了什麼,另外,在Log Messages視窗的左下角勾選了"Include merged revisions"你還能看到額外的Merge information:

圖中灰色的是和merge相關的log,共發生了兩次merge,第一次是在r6,在r6中,branch合併了trunk在r4時提交的變化;第二次是在r7,在r7中,trunk合併了branch從r2到r6的所有變化。1、本地Repository的建立

repository的建立很簡單,假設我要在D:\TortoiseSVN\TestRepository目錄中建立repository,只需右鍵TestRepository目錄,依次選擇"TortoiseSVN" -> "Create repository here"便完成了repository的建立。

2、Check out

假設要check out到D:\TortoiseSVN\TestSVN,同樣很簡單,在D:\TortoiseSVN目錄下建立TestSVN目錄,然後在該目錄上右鍵,選擇"SVN Check out...",在彈出的視窗中的"URL of repository"中填入"file:///D:/TortoiseSVN/TestRepository",其他預設即可,最後點選ok。

3、trunk建立新專案MyProject

相當簡單就不贅述了,只列出本次操作所作出的修改:

4、建立branch

在/trunk/MyProject目錄上右鍵,依次選擇"TortoiseSVN" -> "Branch/tag...",在彈出視窗的"To URL"中填入分支的地址,在這裡目標revision選擇HEAD revision,如下圖所示,新增log後點擊ok分支便建立了。這個操作速度非常快,新建的branch在repository中其實只是一個指向trunk某個revision的軟連線而已,並沒有真的複製檔案。


5、Check out分支

右鍵TestSVN目錄選擇"TortoiseSVN Update"即可將剛剛建立的分支下載回本地。進入/branches/MyProject目錄下你會發現其檔案結構和/trunk/MyProject一模一樣。

6、branch提交一個新檔案

7、trunk緊接著提交一個修改

8、branch再次提交一個修改

9、將trunk中的修改同步到branch

6-8演示的是branch和trunk在獨立、並行地開發。為了防止在“錯誤”的道路上越走越遠,現在branch意識到是時候和trunk來一次同步了(將trunk合併到branch)。

首先,在本地trunk中先update一下,有衝突的解決衝突,保證trunk和repository已經完全同步,然後在/branches/MyProject上右鍵,依次選擇"TortoiseSVN" -> “Merge...”,在彈出的視窗中選擇第一項"Merge a range of revision",這個型別的Merge已經介紹得很清楚,適用於將某個分支或主線上提交的多個revision間的變化合併到另外一個分支上。


點選next後,出現如下視窗:

由於是要從trunk合併到branch,理所當然這裡的"URL to merge from"應該填trunk的路徑,"Revision range to merge"很好理解,就是你要將trunk的哪些revision所對應的變化合併到branch中,可以是某一連串的revision,比如4-7,15-HEAD,也可以是某個單獨的revision號。由於在r4中,trunk修改了Person.java中的talk()方法,所以這裡的revision只需填4即可。點選next後出現下圖:

在這裡只需保留預設設定即可。在點選Merge按鈕前你可以先Test merge一把,看成功與否,以及merge的詳細資訊。點選Merge按鈕後trunk所做的修改將同步到branch中。

10、提交合並後的branch

至此,branch已經完全和trunk同步,branch和trunk的程式碼相處很融洽,沒有任何衝突,如果branch已經開發結束,那是時候將branch合併回trunk了,當然,如果branch還要繼續開發,那你將不斷地重複6-10這幾個步驟。

11、將branch合併回trunk

在/trunk/MyProject上右鍵(注意是在主線的目錄上右鍵),依次選擇"TortoiseSVN" -> "Merge...",在彈出的視窗中,Merge type選擇第二項"Reintegrate a branch",這種型別的合併適合在分支開發結束後將所有的改動合併回主線。


點選next後出現如下視窗:

在這裡,"From URL"選擇/branches/MyProject,無需選擇revision號,Reintegrate會將branch上所有修改合併到trunk。後面的步驟和上文第9步中的一樣,不再囉嗦了。如無意外,branch將成功合併到trunk,你需要做的只是將合併後的trunk趕緊commit!

12、提交合並後的trunk

合併後的專案上右鍵,Temp -> Commit。

13、刪除branch

如果你認為你新加的功能已經開發完成了,你可以刪除你的分支!

14、檢視log資訊

到這裡,我已經給你演示完了整個過程,不過最後我們還是看看所有的log資訊吧,通過log能發現我們乾的所有事情:

r1-r7正是我上文在乾的事情,從Message中你能發現我對trunk和branch都幹了什麼,另外,在Log Messages視窗的左下角勾選了"Include merged revisions"你還能看到額外的Merge information:

圖中灰色的是和merge相關的log,共發生了兩次merge,第一次是在r6,在r6中,branch合併了trunk在r4時提交的變化;第二次是在r7,在r7中,trunk合併了branch從r2到r6的所有變化。