Git 分支管理規(guī)范

img
Git 倉(cāng)庫(kù)申請(qǐng)流程
  1. 開發(fā)主管向 Git 管理員提交 Git 倉(cāng)庫(kù)申請(qǐng)【郵件:發(fā)送給 Git 管理員,抄送給項(xiàng)目經(jīng)理,申請(qǐng)表可向 Git 管理員獲取】
  2. Git 管理員審批開發(fā)主管的申請(qǐng),審批以下具體信息:
    1. 審批郵件是否抄送給項(xiàng)目經(jīng)理
    2. 申請(qǐng)的 Git 倉(cāng)庫(kù)名稱是否符合命名規(guī)范
  3. 若審批通過(guò)纳账,則 Git 管理員完成以下任務(wù):
    1. 創(chuàng)建 Git 倉(cāng)庫(kù)
    2. 設(shè)置開發(fā)主管為 Git 倉(cāng)庫(kù)的 Master 角色(管理員,具有該 Git 倉(cāng)庫(kù)的管理權(quán)限)
    3. 將 Git 倉(cāng)庫(kù)地址告知開發(fā)主管【郵件:發(fā)送給開發(fā)主管,抄送給項(xiàng)目經(jīng)理】
  4. 若審批不通過(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)

image-20190919092114058

開發(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

image-20190919092305100

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ù)

image-20190919092443274

命令示例:

# 切換到 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

image-20190919092649635

當(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 分支?
  1. 開發(fā)一個(gè)獨(dú)立的新特性(完成時(shí)眉抬,需合并到 develop 分支)
  2. 技術(shù)研究與嘗試(若失敗,可隨時(shí)刪除 feature 分支)
  3. 提前實(shí)現(xiàn)下一個(gè)版本需要開發(fā)的特性(可不在本次迭代中發(fā)布)

推薦使用 feature 分支懈凹,但 feature 分支的生命周期不能跨一次迭代

準(zhǔn)備發(fā)布新版本

開發(fā)主管需完成以下任務(wù):

  1. 確認(rèn) develop 分支上的功能是否開發(fā)完畢

  2. 若開發(fā)完畢蜀变,則創(chuàng)建 release 分支(發(fā)布分支),命名規(guī)則:release-分支創(chuàng)建日期-待發(fā)布版本號(hào)介评,例

    如:release-20190919-v1.0.0

  3. 首先在 release 分支中升級(jí) Maven 版本號(hào)库北,例如:1.0.0-SNAPSHOT,然后修改 version.ini 文件(便于在

    部署時(shí)查看當(dāng)前版本號(hào))威沫,最后在 release 分支上做一次提交

  4. 通知測(cè)試主管可對(duì) release 分支進(jìn)行測(cè)試【郵件:發(fā)送給測(cè)試經(jīng)理贤惯,抄送給項(xiàng)目經(jīng)理與團(tuán)隊(duì)成員】

image-20190919092952002

命令示例:

# 從 develop 分支上創(chuàng)建 release 分支:
git checkout –b release-20190919-v1.0.0 develop

修復(fù)待發(fā)布版本中的 Bug

開發(fā)人員在 release 分支上修復(fù)測(cè)試人員提交給自己的 Bug

image-20190919093036529

只允許在 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ù):

  1. 從 release 分支上檢出所有代碼并搭建集成測(cè)試環(huán)境
  2. 安排測(cè)試人員孵构,對(duì) release 分支進(jìn)行集成測(cè)試
  3. 通知開發(fā)主管當(dāng)前版本已集成測(cè)試完畢【郵件:發(fā)送給開發(fā)主管,抄送給項(xiàng)目經(jīng)理】

第二步:冒煙測(cè)試

開發(fā)主管需完成以下任務(wù):

  1. 將 release 分支同時(shí)合并到 master 分支與 develop 分支
  2. 郵件通知測(cè)試主管烟很,對(duì) master 分支進(jìn)行冒煙測(cè)試

第三步:發(fā)布新版本

開發(fā)主管需完成以下任務(wù):

  1. 修改 master 分支上的 Maven 快照版為發(fā)布版(去掉 SNAPSHOT 后綴)
  2. 添加發(fā)布日志(RELEASE.md)
  3. 在 master 分支上創(chuàng)建標(biāo)簽颈墅,命名規(guī)則:tag-日期-版本蜡镶,例如:tag-20190919-v1.0.0
  4. 刪除 release 分支
  5. 打包并上傳 Maven 私服
  6. 通知測(cè)試主管新版本已發(fā)布完畢【郵件:發(fā)送給測(cè)試主管,抄送給項(xiàng)目經(jīng)理與 Git 管理員恤筛,郵件格式
    請(qǐng)找 Git 管理員獲取】
image-20190919094238429

命令示例:

# 合并 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ù):
  1. 從 master 分支某個(gè) tag 上創(chuàng)建一個(gè) hotfix 分支(熱修復(fù)分支)官还,命名規(guī)則:hotfix-分支創(chuàng)建日期-待
    發(fā)布版本號(hào),例如:hotfix-20190919-v1.0.1
  2. 首先在 hotfix 分支中升級(jí) Maven 版本號(hào)(例如:1.0.1-SNAPSHOT)毒坛,然后修改 version.ini 文件望伦,最后在
    hotfix 分支上做一次提交
  3. 指導(dǎo)開發(fā)人員完成 Bug 修復(fù)
  4. 通知測(cè)試主管對(duì) hotfix 分支進(jìn)行測(cè)試【郵件:發(fā)送給測(cè)試主管,抄送給項(xiàng)目經(jīng)理】
image-20190919094344492

命令示例:

# 從某個(gè)標(biāo)簽上創(chuàng)建 hotfix 分支:
git branch hotfix-20190919-v1.0.1 tag-20190919-v1.0.0
第二步:驗(yàn)證 Bug 是否已修復(fù)測(cè)試主管需完成以下任務(wù):
  1. 驗(yàn)證 Bug 是否已修復(fù)
  2. 通知開發(fā)主管 Bug 已修復(fù)【郵件:發(fā)送給開發(fā)主管煎殷,抄送給項(xiàng)目經(jīng)理】
第三步:創(chuàng)建標(biāo)簽并發(fā)布新版本

開發(fā)主管需完成以下任務(wù):

  1. 將 hotfix 分支同時(shí)合并到 master 與 develop 分支
  2. 通過(guò)測(cè)試主管進(jìn)行冒煙測(cè)試
第四步:發(fā)布新版本

開發(fā)主管需完成以下任務(wù):

  1. 修改 master 分支上的 Maven 快照版為發(fā)布版(去掉 SNAPSHOT 后綴)
  2. 添加發(fā)布日志(RELEASE.md)
  3. 在 master 分支上創(chuàng)建標(biāo)簽
  4. 刪除 hotfix 分支
  5. 打包并上傳 Maven 私服
  6. 通知測(cè)試主管新版本已發(fā)布完畢【郵件:發(fā)送給測(cè)試主管屯伞,抄送給項(xiàng)目經(jīng)理與 Git 管理員,郵件格式

請(qǐng)找 Git 管理員獲取】

image-20190919094509499

命令示例:

# 合并 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ù):

  1. 直接在 hotfix 分支上創(chuàng)建標(biāo)簽
  2. 刪除 hotfix 分支(分支刪除了,只要標(biāo)簽還在暇韧,版本就可以找得回來(lái))
  3. 手工修改 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ù):

image-20190925212426543

當(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)新特性
image-20190919095107028

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ī)范

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钮孵,隨后出現(xiàn)的幾起案子骂倘,更是在濱河造成了極大的恐慌,老刑警劉巖巴席,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件历涝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡漾唉,警方通過(guò)查閱死者的電腦和手機(jī)荧库,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赵刑,“玉大人分衫,你說(shuō)我怎么就攤上這事“愦耍” “怎么了蚪战?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵牵现,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我邀桑,道長(zhǎng)瞎疼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任壁畸,我火速辦了婚禮贼急,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捏萍。我一直安慰自己竿裂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布照弥。 她就那樣靜靜地躺著腻异,像睡著了一般。 火紅的嫁衣襯著肌膚如雪这揣。 梳的紋絲不亂的頭發(fā)上悔常,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音给赞,去河邊找鬼机打。 笑死,一個(gè)胖子當(dāng)著我的面吹牛片迅,可吹牛的內(nèi)容都是我干的残邀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼柑蛇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芥挣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耻台,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤空免,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后盆耽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹋砚,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年摄杂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坝咐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡析恢,死狀恐怖墨坚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氮昧,我是刑警寧澤框杜,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布浦楣,位于F島的核電站,受9級(jí)特大地震影響咪辱,放射性物質(zhì)發(fā)生泄漏振劳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一油狂、第九天 我趴在偏房一處隱蔽的房頂上張望历恐。 院中可真熱鬧,春花似錦专筷、人聲如沸弱贼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吮旅。三九已至,卻和暖如春味咳,著一層夾襖步出監(jiān)牢的瞬間庇勃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工槽驶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留责嚷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓掂铐,卻偏偏與公主長(zhǎng)得像罕拂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子全陨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 作者:福天(微信公眾號(hào):mttyply) 張敏強(qiáng)最終沒(méi)能挺住殘酷的現(xiàn)實(shí)烤镐,在上旱凹茫晃悠了3天棍鳖,就落魄的回家了炮叶,身上仍無(wú)...
    福天思想閱讀 453評(píng)論 0 0
  • 下了班,他想體驗(yàn)一下用猛犸充電程序給電車充電渡处,他沒(méi)有實(shí)體卡镜悉,而電子卡也是需要實(shí)體卡設(shè)定的。糟糕的是如果直接掃二維碼...
    文森林木閱讀 641評(píng)論 0 0
  • 每次面試官必問(wèn)的一個(gè)問(wèn)題是:“你的特長(zhǎng)或者愛(ài)好是什么医瘫?”其實(shí)我每次心里都堅(jiān)定的回答――寫作侣肄!有幾次真的臉皮厚的...
    圖_圖閱讀 146評(píng)論 0 0
  • 1.MECE法則:把整體分解成要素,在這個(gè)過(guò)程中不重疊醇份、不遺漏稼锅。 2.波特五力模型:任何時(shí)候都會(huì)有各種競(jìng)爭(zhēng)對(duì)手吼具,潛...
    小笨魚王月閱讀 140評(píng)論 0 0
  • 大家好,我是許昌市實(shí)驗(yàn)小學(xué)二(九)班的盛夢(mèng)洋矩距,我是一個(gè)活潑開朗拗盒,天真可愛(ài),熱愛(ài)生活的小朋友锥债。我喜歡讀書陡蝇、跳舞和...
    盛盛盛姑娘閱讀 676評(píng)論 0 1