1. 程式人生 > >主幹(trunk)、分支(branch )、標記(tag) 用法示例 + 圖解

主幹(trunk)、分支(branch )、標記(tag) 用法示例 + 圖解

以svn為例,git的master相當於trunk,dev分支相當於branches

-------------------------------------------------------------------------------------------------------------------------------------------- 

trunk:是用來做主方向開發的一直向前進行,一個新模組的開發,這個時候就放在trunk,當模組開發完成後,需要修改,就用branch。  

branch:是用來做並行開發的,這裡的並行是指和trunk進行比較。  

tag:是用來做一個milestone(里程碑)的,不管是不是釋出版本,但都是一個可用的版本,不需要修改如果要修改就要選一個tag進行branche開發。  

--------------------------------------------------------------------------------------------------------------------------------------------

為什麼要分3個目錄?且都是重複的程式碼Copy有意義嗎?來看下下面這個例子就明白這樣做的好處了。

例如:開發一個聊天軟體QQ,第一期只要求軟體具有基本的聊天功能,後期會加入視屏聊天、魔法表情、換面板等功能。

當第一期開發完,經測試人員測試後沒問題。此時應該給予當前程式碼庫打tag命名為QQ_tag_release_v1.0.0,同時trunk如火如荼進入v2.0.0開發,但是此時經廣大使用者反饋v1.0.0的QQ登入後經常閃退,由於v2.0.0正在開發即使bug改了也釋出不了。那麼就要基於QQ_tag_release_v1.0.0的標記(tag)做一個分支(branch)命名為QQ_branch_bugfix_v1.0.0並基於這個分支快速進行BUG修改,等到BUG修改結束後做一個tag命名為QQ_tag_release_v1.0.1,根據需要決定QQ_branch_bugfix_v1.0.0是否合併(Merge)併入主幹(trunk)。

--------------------------------------------------------------------------------------------------------------------------------------------

步驟:

1、新建svn倉庫單專案/多專案倉庫都可以,結構如下圖這樣

2、新建資源庫

填寫URL倉庫地址點選“Finish”

如下

新建qq專案匯入svn的trun目錄(選中專案右鍵Team-->Share Projects...)

匯入後項目後的svn倉庫如下

由於緊鑼密鼓的工作v1.0.0終於開發完(v1.0.0只有基本的聊天功能),經測試沒有發現問題可以提供給使用者使用,同時在此程式碼庫上打一個tag版本命名為QQ_tag_release_v1.0.0  

選中專案右鍵 “Team--> 分支/標記... ” 填寫要打tag的版本號後點擊”Next“

下一步”Next“

填寫註釋後點擊”Finish“

這時svn資源庫tag目錄下會多了個QQ_tag_release_v1.0.0

同時trunk如火如荼進入v2.0.0開發,視屏聊天功能正在開發

看一下這時的svn資源庫

此時經廣大使用者反饋v1.0.0的QQ登入後經常閃退,由於v2.0.0正在開發即使bug改了也釋出不了。那麼就要基於QQ_tag_release_v1.0.0的標記(tag)做一個分支(branch)命名為QQ_branch_bugfix_v1.0.0

選擇專案右鍵 ”Team“-->”切換(S...)“ 選擇tags的QQ_tag_release_v1.0.0

更改路徑後點擊”OK“

已經切換到標記的QQ_tag_release_v1.0.0

接下來要以QQ_tag_release_v1.0.0 為基礎建立一個branch名為QQ_branch_bugfix_v1.0.0並基於這個分支快速進行BUG修改

選中專案右鍵 “Team--> 分支/標記... ” 點選 ”瀏覽...“ 選擇branches目錄

填寫要建立分支(branch)名為 ”QQ_branch_bugfix_v1.0.0“ 後點擊 ”Next“

點選”Next“

填寫註釋後選中 ”切換工作複本為新的分支/標記“ 後 點選 ”Finish“

看下工作空間的和svn資源庫的變化

在branch分支名為 ”QQ_branch_bugfix_v1.0.0“ 中修改bug

提交修改bug後的程式碼

提交後

閃退bug已經修改可以提供給使用者使用了,接下來要再打一個tag命名為 ”QQ_tag_release_v1.0.1“

選中名為”QQ_branch_bugfix_v1.0.0“ 的分支專案右鍵 “Team--> 分支/標記... ” 點選 ”瀏覽...“ 選擇tags目錄

填寫要建立標記(tag)名為 ”QQ_tag_release_v1.0.1“ 後點擊 ”Next“

點選”Next“

填寫註釋資訊後點擊”Finish“

來看看資源庫中有什麼變化,tags目錄下多了一個名為”QQ_tag_release_v1.0.1“ 的標記

--------------------------------------------------------------------------------------------------------------------------------------------

下面演示 將 分支(branches) 合併到 主幹(trunk)

根據需要決定將分支名為 ”QQ_branch_bugfix_v1.0.0“ 的branch 合併(Merge)併入主幹(trunk)。 

步 驟:

1. 要想將分支合併到主幹,首先需要切換到主幹。
在專案上面點右鍵,選擇Team — 切換,URL地址為主幹的訪問路徑

(略過。。。 上面有)

2. 在專案上面點右鍵,選擇 ”Team“--> ”合併(M)...“ ,選中“Reinitegrate a branch”。

3. 選擇要合併到主幹的分支”QQ_branch_bugfix_v1.0.0“

4. 點選”Finish“ 結束合併

5. 點選”OK“

6. 如果想要撤銷合併選中專案右鍵”Undo merge...“ 

 7. trunk中的qq專案下就會多了從分支”QQ_branch_bugfix_v1.0.0“裡Merge合併的程式碼

8. 提交合並後的程式碼

9. 提交後如下

--------------------------------------------------------------------------------------------------------------------------------------------

一般的,我們的所有的開發都是基於trunk進行開發,當一個版本/release開發告一段落(開發、測試、文件、製作安裝程式、打包等)結束後,程式碼處於凍結狀態(人為規定,可以通過hook來進行管理)。此時應該基於當前凍結的程式碼庫,打tag。當下一個版本/階段的開發任務開始,繼續在trunk進行開發。
此時,如果發現了上一個已發行版本(ReleasedVersion)有一些bug,或者一些很急迫的功能要求,而正在開發的版本(DevelopingVersion)無法滿足時間要求,這時候就需要在上一個版本上進行修改了。應該基於發行版對應的tag,做相應的分支(branch)進行開發。