Git 分支設計規范


概述

這篇文章分享 Git 分支設計規范,目的是提供給研發人員做參考。

規范是死的,人是活的,希望自己定的規范,不要被打臉。

在說 Git 分支規范之前,先說下在系統開發過程中常用的環境。

簡稱 全稱
DEV Development environment
FAT Feature Acceptance Test environment
UAT User Acceptance Test environment
PRO Production environment
  • DEV 環境:用於開發者調試使用。
  • FAT 環境:功能驗收測試環境,用於測試環境下的軟件測試者測試使用。
  • UAT 環境:用戶驗收測試環境,用於生產環境下的軟件測試者測試使用。
  • PRO 環境:就是生產環境。

比如,項目域名為:http://www.abc.com,那么相關環境的域名可這樣配置:

  • DEV 環境:本地配置虛擬域名即可
  • FAT 環境:http://fat.abc.com
  • UAT 環境:http://uat.abc.com
  • PRO 環境:http://www.abc.com

接下來,針對不同的環境來設計分支。

分支

分支 名稱 環境 可訪問
master 主分支 PRO
release 預上線分支 UAT
hotfix 緊急修復分支 DEV
develop 測試分支 FAT
feature 需求開發分支 DEV

master 分支

master 為主分支,用於部署到正式環境(PRO),一般由 releasehotfix 分支合並,任何情況下不允許直接在 master 分支上修改代碼。

release 分支

release 為預上線分支,用於部署到預上線環境(UAT),始終保持與 master 分支一致,一般由 develophotfix 分支合並,不建議直接在 release 分支上直接修改代碼。

如果在 release 分支測試出問題,需要回歸驗證 develop 分支看否存在此問題。

hotfix 分支

hotfix 為緊急修復分支,命名規則為 hotfix- 開頭。

當線上出現緊急問題需要馬上修復時,需要基於 releasemaster 分支創建 hotfix 分支,修復完成后,再合並到 releasedevelop 分支,一旦修復上線,便將其刪除。

develop 分支

develop 為測試分支,用於部署到測試環境(FAT),始終保持最新完成以及 bug 修復后的代碼,可根據需求大小程度確定是由 feature 分支合並,還是直接在上面開發。

一定是滿足測試的代碼才能往上面合並或提交。

feature 分支

feature 為需求開發分支,命名規則為 feature- 開頭,一旦該需求上線,便將其刪除。

這么說可能有點不容易理解,接下來舉幾個開發場景。

開發場景

新需求加入

有一個訂單管理的新需求需要開發,首先要創建一個 feature-order 分支,問題來了,該分支是基於哪個分支創建?

如果 存在 未測試完畢的需求,就基於 master 創建。

如果 不存在 未測試完畢的需求,就基於 develop 創建。

  1. 需求在 feature-order 分支開發完畢,准備提測時,要先確定 develop 不存在未測試完畢的需求,這時研發人員才能將將代碼合並到 develop (測試環境)供測試人員測試。

  2. 測試人員在 develop (測試環境) 測試通過后,研發人員再將代碼發布到 release (預上線環境)供測試人員測試。

  3. 測試人員在 release (預上線環境)測試通過后,研發人員再將代碼發布到 master (正式環境)供測試人員測試。

  4. 測試人員在 master (正式環境) 測試通過后,研發人員需要刪除 feature-order 分支。

普通迭代

有一個訂單管理的迭代需求,如果開發工時 < 1d,直接在 develop 開發,如果開發工時 > 1d,那就需要創建分支,在分支上開發。

開發后的提測上線流程 與 新需求加入的流程一致。

修復測試環境 Bug

develop 測試出現了Bug,如果修復工時 < 2h,直接在 develop 修復,如果修復工時 > 2h,需要在分支上修復。

修復后的提測上線流程 與 新需求加入的流程一致。

修改預上線環境 Bug

release 測試出現了Bug,首先要回歸下 develop 分支是否同樣存在這個問題。

如果存在,修復流程 與 修復測試環境 Bug流程一致。

如果不存在,這種可能性比較少,大部分是數據兼容問題,環境配置問題等。

修改正式環境 Bug

master 測試出現了Bug,首先要回歸下 releasedevelop 分支是否同樣存在這個問題。

如果存在,修復流程 與 修復測試環境 Bug流程一致。

如果不存在,這種可能性也比較少,大部分是數據兼容問題,環境配置問題等。

緊急修復正式環境 Bug

需求在測試環節未測試出 Bug,上線運行一段時候后出現了 Bug,需要緊急修復的。

我個人理解緊急修復的意思是沒時間驗證測試環境了,但還是建議驗證下預上線環境。

  • 如果 release 分支存在未測試完畢的需求,就基於 master 創建 hotfix-xxx 分支,修復完畢后發布到 master 驗證,驗證完畢后,將 master 代碼合並到 releasedevelop 分支,同時刪掉 hotfix-xxx 分支。

  • 如果 release 分支不存在未測試完畢的需求,但 develop 分支存在未測試完畢的需求,就基於 release 創建 hotfix-xxx 分支,修復完畢后發布到 release 驗證,后面流程與上線流程一致,驗證完畢后,將 master 代碼合並到 develop 分支,同時刪掉 hotfix-xxx 分支。

  • 如果 releasedevelop 分支都不存在未測試完畢的需求, 就直接在 develop 分支上修復完畢后,發布到 release 驗證,后面流程與上線流程一致。

並行提測

在一個項目中並行開發了兩個需求,並行提測,但是上線日期不同。

我能想到的兩種方案:

  • 再部署一套可供測試人員測試的分支
  • 使用 git cherry-pick “挑揀”提交

對於並行提測,你有好的方案嗎?歡迎留言。

Commit 日志規范

提交信息一定要認真填寫!

建議參考規范:<type>(scope):<subject>

比如:fix(首頁模塊):修復彈窗 JS Bug。

type 表示 動作類型,可分為:

  • fix:修復 xxx Bug
  • feat:新增 xxx 功能
  • test:調試 xxx 功能
  • style:變更 xxx 代碼格式或注釋
  • docs:變更 xxx 文檔
  • refactor:重構 xxx 功能或方法

scope 表示 影響范圍,可分為:模塊、類庫、方法等。

subject 表示 簡短描述,最好不要超過 60 個字,如果有相關 Bug 的 Jira 號,建議在描述中加上。

小結

暫時就想到這么多,規范這東西不是一成不變的,供參考。

推薦閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM