1. 程式人生 > >Git 分支設計規範

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 號,建議在描述中加上。

小結

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

推薦閱讀

  • API 介面設計規範
  • 一線技術管理者究竟在管什麼事?
  • 一個人被提拔,不僅僅是能力,而是信任