生產/開發模型 master/dev
特性/發佈模型 master/dev/feature
開發/發佈分離模型 master/dev/feature/release
開發/發佈/缺陷分離模型 master/dev/feature/release/hotfix
主分支(Main branches)
項目兩個常駐分支:
master
主幹分支(鎖定),僅用於發佈新版本,平時不能在上面幹活,只做代碼合併、以及打標記(git tag
)。 理論上,每當對 master
分支有一個合併提交操作,我們就可以使用 Git 鉤子腳本來自動構建並且發佈軟件到生產服務器。
develop
開發分支(非鎖定),平時幹活的地方。每當發版時,需要被合併到 master
。對於簡單的項目而言,這樣的分支模型已經夠用了。
輔助性分支(Supporting branches)
除了常駐分支,通常大的特性開發或生產缺陷修復還建議創建相應的臨時分支。因爲:
- 在分支上開發可以讓你隨意嘗試,進退自如,比如碰上無法正常工作的特性或補丁,可以先擱在那邊,直到有時間仔細覈查修復爲止。
- 團隊中如果有代碼審查流程,獨立的分支還可以留給審查者抽空審查的時間和改進代碼的餘地,並將是否合併、是否發佈的權利留給審查者,爲代碼質量設一道門檻。
每一類分支都有一個特定目的,如何命名每一類分支?建議用相關的主題關鍵字進行命名,並且建議將分支名稱分置於不同命名空間(前綴)下,例如:
分支 | 來源分支 | 合併分支 | 鎖定 | 說明 |
---|---|---|---|---|
feature-* |
develop |
develop |
NO | 特性分支,爲了開發某種特定功能而建。 |
release-* |
develop |
develop ,master |
YES | 預發佈分支,爲了新版本的發佈做準備,一般命名爲release-<版本號> 。 |
hotfix-* |
master |
develop ,master |
NO | 補丁分支,爲了修復生產缺陷而建,一般命名爲 hotfix-<issue 編號> |
與主分支不同,這些輔助性分支總是有一個有限的生命期,因爲他們在被合併到主分支之後,就會被移除掉。