雲和安全管理服務專家新钛雲服 王洧濱原創
一、前言
Git作為版本控制管理工具中的優秀代表,其分支管理功能使得團隊協同開發成為一件非常簡單的事情。本文介紹一種産品開發中的Git分支工作方法,以供探讨。
二、産品的軟體版本号定義
軟體版本号定義,分四項:主版本号.子版本号.修訂号.Build号,如:V1.3.2.123
軟體hotfix版本号定義,分四項:主版本号.子版本号.修訂号.修補号,如:V1.3.2.125
版本号 | 說明 | 備注 |
主版本号 | 系統業務重構或架構重構時增加;重大功能或方向改變時增加;大範圍不相容之前的接口時增加。 | |
子版本号 | 增加新的業務功能時增加。 | |
修訂号 | 有改動就增加。 | 從0開始 |
修補号 | hostfix版本号基于所修複的版本的Build号,取釋出版本的最大的Build号往上增加如果修複基于V1.3.2.1,則hotfix版本為V1.3.2.2如果目前釋出版本的Build版本是V1.3.2.101,目前最大Build号為105,則修補版本号為V1.3.2.106 | 從1開始 |
Build号 | 編譯号,有編譯就增加。 | 從1開始 |
三、Git分支命名
1、基本分支
分支命名 | 說明 | 生命周期 |
master | 記錄上線版本的疊代,該分支代碼與線上代碼是完全一緻的主分支 | 項目存在期間存續,項目下線之後歸檔 |
dev | 記錄開發代碼活動曆史 | 同master |
test | 記錄測試活動曆史 | 同master |
feature-(ver)-(name) | 屬于開發個人的代碼活動曆史記錄,如David正在開發1.0.1版本,則分支名為:feature-v1.0.1-david | 版本開始開發至版本釋出,版本釋出後結束 |
2、擴充分支
分支命名 | 說明 | 生命周期 |
hostfix-(ver) | 線上版本的緊急修複代碼分支,開發與測試都采用同一分支 | 版本開始開發至版本釋出 |
dev-(company) | 記錄針對特定需求的定制化版本的開發代碼活動曆史 | 項目存在期間存續,項目下線之後歸檔 |
test-(company) | 記錄針對特定需求的定制化版本的測試代碼活動曆史 | 同dev-(company) |
feature-(company)-v1.0.2-(name) | 屬于開發個人的定制化版本的開發代碼活動曆史記錄,如David正在開發的定制化阿裡公司的1.0.1版本,則分支名為:feature-ali-v1.0.1-david | 版本開始開發至版本釋出,版本釋出後結束 |
dev-v1.0.2 | 多分支并發開發時,記錄特定版本的開發代碼活動曆史 | 版本開始開發至版本釋出 |
test-v1.0.2 | 多分支并發開發時,記錄特定版本的測試代碼活動曆史 | 版本開始開發至版本釋出 |
3、tags
tag命名 | 說明 | 生命周期 |
tag-v(ver) | 僅針對釋出版本打tag,如:tag-v1.0.0.1 | 項目存在期間存續,項目下線之後歸檔 |
四、Git分支工作規範
1、分支工作基本原則
- master:系統版本的準線,版本通過測試并處于可釋出狀态時,才可合并入master,一直維持可建構狀态。
- dev*:協同開發分支,不可直接送出,僅可通過其他分支合并進入。
- test*:測試分支,不可直接送出,僅可通過dev*分支合并進入。
- feature*:個人開發分支,個人開發完成需要合并入dev分之前,先push至遠端feature分支。
2、一般項目開發
工作流程如上圖:
1、項目負責人從master的基線check out,初始化dev分支;
2、開發者從dev分支check out,建立本地個人開發分支feature*;
3、開發者完成功能開發後,commit個人feature*分支,并push至遠端個人feature*分支;
4、開發者在gitlab上送出個人的代碼和并請求至dev分支;
4、代碼審查人負責代碼審查,合并合理代碼;
6、代碼提測時,開發負責人送出dev分支到test的合并請求;
7、項目負責人合并dev分支至test分支;
8、版本測試完成後,開發負責人送出test分支至master分支的合并請求;
9、項目負責人合并代碼至master;
10、項目負責人以目前代碼為基線,在master分支上tag目前版本号。
3、hostfix版本開發
hostfix為緊急修複的版本,不同于正常需求的版本流程。工作流程如下圖。
4、定制化版本開發
定制化版本出現在給某些特定使用者提供特殊定制的功能,而又與主幹分支存在不同業務邏輯的情況下。工作流程如下圖。
5、多版本并行
版本測試的時候,可能存在開發團隊眼巴巴等待測試回報bug的時候。配合默契的多版本并行開發,可以合理利用時間,加速版本疊代。工作流程如下圖。