Git 倉(cāng)庫(kù)申請(qǐng)流程
- 開發(fā)主管向 Git 管理員提交 Git 倉(cāng)庫(kù)申請(qǐng)【郵件:發(fā)送給 Git 管理員,抄送給項(xiàng)目經(jīng)理,申請(qǐng)表可向 Git 管理員獲取】
- Git 管理員審批開發(fā)主管的申請(qǐng),審批以下具體信息:
- 審批郵件是否抄送給項(xiàng)目經(jīng)理
- 申請(qǐng)的 Git 倉(cāng)庫(kù)名稱是否符合命名規(guī)范
- 若審批通過(guò)纳账,則 Git 管理員完成以下任務(wù):
- 創(chuàng)建 Git 倉(cāng)庫(kù)
- 設(shè)置開發(fā)主管為 Git 倉(cāng)庫(kù)的 Master 角色(管理員,具有該 Git 倉(cāng)庫(kù)的管理權(quán)限)
- 將 Git 倉(cāng)庫(kù)地址告知開發(fā)主管【郵件:發(fā)送給開發(fā)主管,抄送給項(xiàng)目經(jīng)理】
- 若審批不通過(guò)震糖,則駁回申請(qǐng)【郵件:發(fā)送給開發(fā)主管,抄送給項(xiàng)目經(jīng)理】
初始化 Git 倉(cāng)庫(kù)
第一步:克隆遠(yuǎn)程倉(cāng)庫(kù)
開發(fā)主管從 Gitlab 中克隆遠(yuǎn)程倉(cāng)庫(kù)
命令示例:
git clone <倉(cāng)庫(kù)地址>
第二步:提交并推送初始版本
開發(fā)主管提交代碼初始版本到 master 分支趴腋,并推送至 Gitlab 系統(tǒng)
開發(fā)主管在 Gitlab 系統(tǒng)中設(shè)置 master 分支為 Protectd 分支(保護(hù)分支)Protected 分支不允許 Developer 推送代碼吊说,但 Master 可以推送代碼
命令示例:
# 提交本地修改:
git add .
git commit –m “提交日志”
# 推送 master 分支:
git push origin master
第三步:創(chuàng)建開發(fā)分支
開發(fā)主管在 master 分支上創(chuàng)建 develop 分支(開發(fā)分支),并推送至 Gitlab 系統(tǒng) master
master 分支與 develop 分支一樣优炬,有且僅有一個(gè)
命令示例:
# 從 master 分支上創(chuàng)建 develop 分支:
git checkout –b develop master
# 推送 develop 分支:
git push origin develop
開發(fā)新功能
開發(fā)人員在 develop 分支上實(shí)現(xiàn)新功能颁井,包括:新特性與 Bug 修復(fù)
命令示例:
# 切換到 develop 分支:
git checkout develop
# 提交本地修改:
git add .
git commit –m “提交日志”
# 推送 develop 分支:
git push origin develop
若存在多個(gè)新特性可以并行開發(fā),則開發(fā)主管可創(chuàng)建一個(gè)或多個(gè) feature 分支(特性分支)蠢护,命名規(guī)范:feature-分支創(chuàng)建日期-新特性關(guān)鍵字
雅宾,例如:feature-20190919-i18n
當(dāng)新特性開發(fā)完畢后,開發(fā)主管需將 feature 分支合并到 develop 分支葵硕,最后需刪除 feature 分支
命令示例:
# 從 develop 分支上創(chuàng)建 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
# 刪除遠(yuǎn)程 feature 分支:
git push origin :feature-20190919-i18n
什么時(shí)候需考慮使用 feature 分支?
- 開發(fā)一個(gè)獨(dú)立的新特性(完成時(shí)眉抬,需合并到 develop 分支)
- 技術(shù)研究與嘗試(若失敗,可隨時(shí)刪除 feature 分支)
- 提前實(shí)現(xiàn)下一個(gè)版本需要開發(fā)的特性(可不在本次迭代中發(fā)布)
推薦使用 feature 分支懈凹,但 feature 分支的生命周期不能跨一次迭代
準(zhǔn)備發(fā)布新版本
開發(fā)主管需完成以下任務(wù):
確認(rèn) develop 分支上的功能是否開發(fā)完畢
-
若開發(fā)完畢蜀变,則創(chuàng)建 release 分支(發(fā)布分支),命名規(guī)則:
release-分支創(chuàng)建日期-待發(fā)布版本號(hào)
介评,例如:release-20190919-v1.0.0
-
首先在 release 分支中升級(jí) Maven 版本號(hào)库北,例如:1.0.0-SNAPSHOT,然后修改 version.ini 文件(便于在
部署時(shí)查看當(dāng)前版本號(hào))威沫,最后在 release 分支上做一次提交
通知測(cè)試主管可對(duì) release 分支進(jìn)行測(cè)試【郵件:發(fā)送給測(cè)試經(jīng)理贤惯,抄送給項(xiàng)目經(jīng)理與團(tuán)隊(duì)成員】
命令示例:
# 從 develop 分支上創(chuàng)建 release 分支:
git checkout –b release-20190919-v1.0.0 develop
修復(fù)待發(fā)布版本中的 Bug
開發(fā)人員在 release 分支上修復(fù)測(cè)試人員提交給自己的 Bug
只允許在 release 分支上修復(fù) Bug,不允許提交任何新特性棒掠,開發(fā)主管需全程監(jiān)管
命令示例:
# 切換到 release 分支:
git checkout release-20190919-v1.0.0
# 提交本地修改:
git add .
git commit –m “提交日志”
# 推送 release 分支:
git push origin release-20190919-v1.0.0
發(fā)布新版本
第一步:集成測(cè)試
測(cè)試主管需完成以下任務(wù):
- 從 release 分支上檢出所有代碼并搭建集成測(cè)試環(huán)境
- 安排測(cè)試人員孵构,對(duì) release 分支進(jìn)行集成測(cè)試
- 通知開發(fā)主管當(dāng)前版本已集成測(cè)試完畢【郵件:發(fā)送給開發(fā)主管,抄送給項(xiàng)目經(jīng)理】
第二步:冒煙測(cè)試
開發(fā)主管需完成以下任務(wù):
- 將 release 分支同時(shí)合并到 master 分支與 develop 分支
- 郵件通知測(cè)試主管烟很,對(duì) master 分支進(jìn)行冒煙測(cè)試
第三步:發(fā)布新版本
開發(fā)主管需完成以下任務(wù):
- 修改 master 分支上的 Maven 快照版為發(fā)布版(去掉 SNAPSHOT 后綴)
- 添加發(fā)布日志(RELEASE.md)
- 在 master 分支上創(chuàng)建標(biāo)簽颈墅,命名規(guī)則:tag-日期-版本蜡镶,例如:tag-20190919-v1.0.0
- 刪除 release 分支
- 打包并上傳 Maven 私服
- 通知測(cè)試主管新版本已發(fā)布完畢【郵件:發(fā)送給測(cè)試主管,抄送給項(xiàng)目經(jīng)理與 Git 管理員恤筛,郵件格式
請(qǐng)找 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 分支上創(chuàng)建標(biāo)簽:
git tag tag-20190919-v1.0.0
# 刪除本地 release 分支:
git branch –d release-20190919-v1.0.0
# 刪除遠(yuǎn)程 release 分支:
git push origin :release-20190919-v1.0.0
修復(fù)線上 Bug
第一步:創(chuàng)建 hotfix 分支 開發(fā)主管需完成以下任務(wù):
- 從 master 分支某個(gè) tag 上創(chuàng)建一個(gè) hotfix 分支(熱修復(fù)分支)官还,命名規(guī)則:hotfix-分支創(chuàng)建日期-待
發(fā)布版本號(hào),例如:hotfix-20190919-v1.0.1 - 首先在 hotfix 分支中升級(jí) Maven 版本號(hào)(例如:1.0.1-SNAPSHOT)毒坛,然后修改 version.ini 文件望伦,最后在
hotfix 分支上做一次提交 - 指導(dǎo)開發(fā)人員完成 Bug 修復(fù)
- 通知測(cè)試主管對(duì) hotfix 分支進(jìn)行測(cè)試【郵件:發(fā)送給測(cè)試主管,抄送給項(xiàng)目經(jīng)理】
命令示例:
# 從某個(gè)標(biāo)簽上創(chuàng)建 hotfix 分支:
git branch hotfix-20190919-v1.0.1 tag-20190919-v1.0.0
第二步:驗(yàn)證 Bug 是否已修復(fù)測(cè)試主管需完成以下任務(wù):
- 驗(yàn)證 Bug 是否已修復(fù)
- 通知開發(fā)主管 Bug 已修復(fù)【郵件:發(fā)送給開發(fā)主管煎殷,抄送給項(xiàng)目經(jīng)理】
第三步:創(chuàng)建標(biāo)簽并發(fā)布新版本
開發(fā)主管需完成以下任務(wù):
- 將 hotfix 分支同時(shí)合并到 master 與 develop 分支
- 通過(guò)測(cè)試主管進(jìn)行冒煙測(cè)試
第四步:發(fā)布新版本
開發(fā)主管需完成以下任務(wù):
- 修改 master 分支上的 Maven 快照版為發(fā)布版(去掉 SNAPSHOT 后綴)
- 添加發(fā)布日志(RELEASE.md)
- 在 master 分支上創(chuàng)建標(biāo)簽
- 刪除 hotfix 分支
- 打包并上傳 Maven 私服
- 通知測(cè)試主管新版本已發(fā)布完畢【郵件:發(fā)送給測(cè)試主管屯伞,抄送給項(xiàng)目經(jīng)理與 Git 管理員,郵件格式
請(qǐng)找 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 分支上創(chuàng)建標(biāo)簽:
git checkout master
git tag tag-20190919-v1.0.1
# 刪除本地 hotfix 分支:
git branch –d hotfix-20190919-v1.0.1
# 刪除遠(yuǎn)程 hotfix 分支:
git push origin :hotfix-20190919-v1.0.1
若無(wú)法將 hotfix 分支合并到 master 與 develop 分支時(shí)豪直,應(yīng)該如何發(fā)布?
比如:現(xiàn)在 master 分支已經(jīng)發(fā)布了 2.0.0 版本(代碼結(jié)構(gòu)發(fā)生了很大的變化)劣摇,但線上發(fā)現(xiàn)了一個(gè) 1.0.0 版 本的 Bug,當(dāng)修改了 Bug后弓乙,是無(wú)法再合并到 master 與 develop 分支的末融,開發(fā)主管需完成以下任務(wù):
- 直接在 hotfix 分支上創(chuàng)建標(biāo)簽
- 刪除 hotfix 分支(分支刪除了,只要標(biāo)簽還在暇韧,版本就可以找得回來(lái))
- 手工修改 develop 分支中的代碼(在后續(xù)發(fā)布時(shí)再合并到 master 分支中)
定制化項(xiàng)目
當(dāng)需要對(duì)某項(xiàng)目進(jìn)行定制化時(shí)勾习,可從源項(xiàng)目的 Git 倉(cāng)庫(kù) fork 出一個(gè)新的 Git 倉(cāng)庫(kù):
當(dāng) fork 后,對(duì) repo1 做出的任何修改锨咙,都不會(huì)影響到 repo2
在 repo2 中修復(fù)了 Bug语卤,可通過(guò) Merge Request 的方式提交給 repo1
在 repo2 中可隨時(shí)拉取 repo1 中的提交追逮,但 repo1 不能拉取 repo2 中的提交
附錄
Maven 版本號(hào)命名規(guī)范
格式:Major.Minor.Micro
版本 | 說(shuō)明 |
---|---|
Major 版本 | 架構(gòu)調(diào)整 |
Minor 版本 | 新特性 |
Micro 版本 | Bug 修復(fù)酪刀、優(yōu)化 |
Git 分支類型
分支 | 用途 |
---|---|
master 分支(主分支) | 穩(wěn)定版本 |
develop 分支(開發(fā)分支) | 最新版本 |
release 分支(發(fā)布分支) | 發(fā)布新版本 |
hotfix 分支(熱修復(fù)分支) | 修復(fù)線上 Bug |
feature 分支(特性分支) | 實(shí)現(xiàn)新特性 |
Gitlab 角色與項(xiàng)目角色對(duì)應(yīng)關(guān)系
Gitlab 角色 | 項(xiàng)目角色 |
---|---|
Owner(擁有者) | Git 管理員 |
Master(管理員) | 開發(fā)主管 |
Developer(開發(fā)者) | 開發(fā)人員 |
Reporter(報(bào)告者) | 測(cè)試人員 |
Guest(觀察者) | 其他人員 |
Git 管理員與開發(fā)主管的職責(zé)
Git 管理員 | 開發(fā)主管 |
---|---|
創(chuàng)建 Git 倉(cāng)庫(kù) | 管理項(xiàng)目分支 |
檢查 Git 分支規(guī)范 | 成員管理 |
維護(hù) Gitlab 系統(tǒng) | 管理標(biāo)簽 |
來(lái)源:Git分支管理規(guī)范