Git 分支管理規範
Git 倉庫申請流程
- 開發主管向 Git 管理員提交 Git 倉庫申請【郵件:傳送給 Git 管理員,抄送給專案經理,申請表可向 Git 管理員獲取】
- Git 管理員審批開發主管的申請,審批以下具體資訊:
- 審批郵件是否抄送給專案經理
- 申請的 Git 倉庫名稱是否符合命名規範
- 若審批通過,則 Git 管理員完成以下任務:
- 建立 Git 倉庫
- 設定開發主管為 Git 倉庫的 Master 角色(管理員,具有該 Git 倉庫的管理許可權)
- 將 Git 倉庫地址告知開發主管【郵件:傳送給開發主管,抄送給專案經理】
- 若審批不通過,則駁回申請【郵件:傳送給開發主管,抄送給專案經理】
初始化 Git 倉庫
第一步:克隆遠端倉庫
開發主管從 Gitlab 中克隆遠端倉庫
命令示例:
git clone <倉庫地址>
複製程式碼
第二步:提交併推送初始版本
開發主管提交程式碼初始版本到 master 分支,並推送至 Gitlab 系統
開發主管在 Gitlab 系統中設定 master 分支為 Protectd 分支(保護分支)Protected 分支不允許 Developer 推送程式碼,但 Master 可以推送程式碼
命令示例:
# 提交本地修改:
git add .
git commit –m “提交日誌”
# 推送 master 分支:
git push origin master
複製程式碼
第三步:建立開發分支
開發主管在 master 分支上建立 develop 分支(開發分支),並推送至 Gitlab 系統 master
master 分支與 develop 分支一樣,有且僅有一個
命令示例:
# 從 master 分支上建立 develop 分支:
git checkout –b develop master
# 推送 develop 分支:
git push origin develop
複製程式碼
開發新功能
開發人員在 develop 分支上實現新功能,包括:新特性與 Bug 修復
命令示例:
# 切換到 develop 分支:
git checkout develop
# 提交本地修改:
git add .
git commit –m “提交日誌”
# 推送 develop 分支:
git push origin develop
複製程式碼
若存在多個新特性可以並行開發,則開發主管可建立一個或多個 feature 分支(特性分支),命名規範:feature-分支建立日期-新特性關鍵字
,例如:feature-20190919-i18n
當新特性開發完畢後,開發主管需將 feature 分支合併到 develop 分支,最後需刪除 feature 分支
命令示例:
# 從 develop 分支上建立 feature 分支:
git checkout –b feature-20190919-i18n develop
# 合併 feature 分支到 develop 分支: git checkout develop
git merge --no-ff feature
# 刪除本地 feature 分支:
git branch –d feature-20190919-i18n
# 刪除遠端 feature 分支:
git push origin :feature-20190919-i18n
複製程式碼
什麼時候需考慮使用 feature 分支?
- 開發一個獨立的新特性(完成時,需合併到 develop 分支)
- 技術研究與嘗試(若失敗,可隨時刪除 feature 分支)
- 提前實現下一個版本需要開發的特性(可不在本次迭代中釋出)
推薦使用 feature 分支,但 feature 分支的生命週期不能跨一次迭代
準備釋出新版本
開發主管需完成以下任務:
-
確認 develop 分支上的功能是否開發完畢
-
若開發完畢,則建立 release 分支(釋出分支),命名規則:
release-分支建立日期-待發布版本號
,例如:release-20190919-v1.0.0
-
首先在 release 分支中升級 Maven 版本號,例如:1.0.0-SNAPSHOT,然後修改 version.ini 檔案(便於在
部署時檢視當前版本號),最後在 release 分支上做一次提交
-
通知測試主管可對 release 分支進行測試【郵件:傳送給測試經理,抄送給專案經理與團隊成員】
命令示例:
# 從 develop 分支上建立 release 分支:
git checkout –b release-20190919-v1.0.0 develop
複製程式碼
修復待發布版本中的 Bug
開發人員在 release 分支上修復測試人員提交給自己的 Bug
只允許在 release 分支上修復 Bug,不允許提交任何新特性,開發主管需全程監管
命令示例:
# 切換到 release 分支:
git checkout release-20190919-v1.0.0
# 提交本地修改:
git add .
git commit –m “提交日誌”
# 推送 release 分支:
git push origin release-20190919-v1.0.0
複製程式碼
釋出新版本
第一步:整合測試
測試主管需完成以下任務:
- 從 release 分支上檢出所有程式碼並搭建整合測試環境
- 安排測試人員,對 release 分支進行整合測試
- 通知開發主管當前版本已整合測試完畢【郵件:傳送給開發主管,抄送給專案經理】
第二步:冒煙測試
開發主管需完成以下任務:
- 將 release 分支同時合併到 master 分支與 develop 分支
- 郵件通知測試主管,對 master 分支進行冒煙測試
第三步:釋出新版本
開發主管需完成以下任務:
- 修改 master 分支上的 Maven 快照版為釋出版(去掉 SNAPSHOT 字尾)
- 新增發布日誌(RELEASE.md)
- 在 master 分支上建立標籤,命名規則:tag-日期-版本,例如:tag-20190919-v1.0.0
- 刪除 release 分支
- 打包並上傳 Maven 私服
- 通知測試主管新版本已釋出完畢【郵件:傳送給測試主管,抄送給專案經理與 Git 管理員,郵件格式 請找 Git 管理員獲取】
命令示例:
# 合併 release 分支到 master 分支:
git checkout master
git merge --no-ff release-20190919-v1.0.0
# 合併 release 分支到 develop 分支:
git checkout develop
git merge --no-ff release-20190919-v1.0.0
# 在 master 分支上建立標籤:
git tag tag-20190919-v1.0.0
# 刪除本地 release 分支:
git branch –d release-20190919-v1.0.0
# 刪除遠端 release 分支:
git push origin :release-20190919-v1.0.0
複製程式碼
修復線上 Bug
第一步:建立 hotfix 分支 開發主管需完成以下任務:
- 從 master 分支某個 tag 上建立一個 hotfix 分支(熱修復分支),命名規則:hotfix-分支建立日期-待 釋出版本號,例如:hotfix-20190919-v1.0.1
- 首先在 hotfix 分支中升級 Maven 版本號(例如:1.0.1-SNAPSHOT),然後修改 version.ini 檔案,最後在 hotfix 分支上做一次提交
- 指導開發人員完成 Bug 修復
- 通知測試主管對 hotfix 分支進行測試【郵件:傳送給測試主管,抄送給專案經理】
命令示例:
# 從某個標籤上建立 hotfix 分支:
git branch hotfix-20190919-v1.0.1 tag-20190919-v1.0.0
複製程式碼
第二步:驗證 Bug 是否已修復測試主管需完成以下任務:
- 驗證 Bug 是否已修復
- 通知開發主管 Bug 已修復【郵件:傳送給開發主管,抄送給專案經理】
第三步:建立標籤併發布新版本
開發主管需完成以下任務:
- 將 hotfix 分支同時合併到 master 與 develop 分支
- 通過測試主管進行冒煙測試
第四步:釋出新版本
開發主管需完成以下任務:
- 修改 master 分支上的 Maven 快照版為釋出版(去掉 SNAPSHOT 字尾)
- 新增發布日誌(RELEASE.md)
- 在 master 分支上建立標籤
- 刪除 hotfix 分支
- 打包並上傳 Maven 私服
- 通知測試主管新版本已釋出完畢【郵件:傳送給測試主管,抄送給專案經理與 Git 管理員,郵件格式
請找 Git 管理員獲取】
命令示例:
# 合併 hotfix 分支到 master 分支:
git checkout master
git merge --no-ff hotfix-20190919-v1.0.1
# 合併 hotfix 分支到 develop 分支:
git checkout develop
git merge --no-ff hotfix-20190919-v1.0.1
# 在 master 分支上建立標籤:
git checkout master
git tag tag-20190919-v1.0.1
# 刪除本地 hotfix 分支:
git branch –d hotfix-20190919-v1.0.1
# 刪除遠端 hotfix 分支:
git push origin :hotfix-20190919-v1.0.1
複製程式碼
若無法將 hotfix 分支合併到 master 與 develop 分支時,應該如何釋出?
比如:現在 master 分支已經發布了 2.0.0 版本(程式碼結構發生了很大的變化),但線上發現了一個 1.0.0 版 本的 Bug,當修改了 Bug後,是無法再合併到 master 與 develop 分支的,開發主管需完成以下任務:
- 直接在 hotfix 分支上建立標籤
- 刪除 hotfix 分支(分支刪除了,只要標籤還在,版本就可以找得回來)
- 手工修改 develop 分支中的程式碼(在後續釋出時再合併到 master 分支中)
定製化專案
當需要對某專案進行定製化時,可從源專案的 Git 倉庫 fork 出一個新的 Git 倉庫:
當 fork 後,對 repo1 做出的任何修改,都不會影響到 repo2 在 repo2 中修復了 Bug,可通過 Merge Request 的方式提交給 repo1 在 repo2 中可隨時拉取 repo1 中的提交,但 repo1 不能拉取 repo2 中的提交
附錄
Maven 版本號命名規範
格式:Major.Minor.Micro
版本 | 說明 |
---|---|
Major 版本 | 架構調整 |
Minor 版本 | 新特性 |
Micro 版本 | Bug 修復、優化 |
Git 分支型別
分支 | 用途 |
---|---|
master 分支(主分支) | 穩定版本 |
develop 分支(開發分支) | 最新版本 |
release 分支(釋出分支) | 釋出新版本 |
hotfix 分支(熱修復分支) | 修復線上 Bug |
feature 分支(特性分支) | 實現新特性 |
Gitlab 角色與專案角色對應關係
Gitlab 角色 | 專案角色 |
---|---|
Owner(擁有者) | Git 管理員 |
Master(管理員) | 開發主管 |
Developer(開發者) | 開發人員 |
Reporter(報告者) | 測試人員 |
Guest(觀察者) | 其他人員 |
Git 管理員與開發主管的職責
Git 管理員 | 開發主管 |
---|---|
建立 Git 倉庫 | 管理專案分支 |
檢查 Git 分支規範 | 成員管理 |
維護 Gitlab 系統 | 管理標籤 |
來源:Git分支管理規範