以svn爲例,git的master至關於trunk,dev分支至關於branchesgit
--------------------------------------------------------------------------------------------------------------------------------------------svn
trunk:是用來作主方向開發的一直向前進行,一個新模塊的開發,這個時候就放在trunk,當模塊開發完成後,須要修改,就用branch。測試
branch:是用來作並行開發的,這裏的並行是指和trunk進行比較。spa
tag:是用來作一個milestone(里程碑)的,無論是否是發佈版本,但都是一個可用的版本,不須要修改若是要修改就要選一個tag進行branche開發。3d
--------------------------------------------------------------------------------------------------------------------------------------------blog
爲何要分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)。文檔
步驟:it
一、新建svn倉庫單項目/多項目倉庫均可以,結構以下圖這樣
二、新建資源庫
填寫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)進行開發。