GitFlow

GitFlow

總則

-統(tǒng)一使用Git作為版本控制的主要工具。

-統(tǒng)一使用GitFlow流程管理控制版本。

提交的準(zhǔn)則

1.除了源碼相關(guān)的東西之外,其他build產(chǎn)生的東西(如:maven的target文件夾,.idea文件夾等),均不能提交進(jìn)入源碼倉(cāng)庫(kù),添加到.gitignore文件中忽略掉。

2.撰寫(xiě)規(guī)范的提交說(shuō)明。一份好的提交說(shuō)明可以幫助協(xié)作者更輕松更有效地配合工作。

3.要嚴(yán)格按照我們指定的流程切換到指定分支,開(kāi)發(fā)相應(yīng)的功能。

分支簡(jiǎn)述

我們使用的分支流程:

[圖片上傳失敗...(image-9693d8-1601368094316)]

主要分支簡(jiǎn)述

-天藍(lán)色圓點(diǎn)所在的線為我們?cè)创a的主線(master)。

-天藍(lán)色方形指向的節(jié)點(diǎn)就是每一個(gè)發(fā)布版本的標(biāo)簽(tag)。

-紫色圓點(diǎn)所在的線為主要分支線(develop)。

-橙色圓點(diǎn)所在的線為新功能開(kāi)發(fā)分支線(feature)。

-綠色圓點(diǎn)所在的線為新版本發(fā)布線(release)。

-紅色圓點(diǎn)所在的線為發(fā)布版本bug修復(fù)線(hotfix)。

主分支說(shuō)明

代替原來(lái)的單個(gè)主線(master),我們使用兩個(gè)分支來(lái)記錄源碼軌跡:

1.原來(lái)的master分支用來(lái)記錄官方發(fā)布軌跡;

2.新的develop分支是一個(gè)集成分支,用來(lái)記錄開(kāi)發(fā)新功能的軌跡。

Master與Develop分支

除了master主線和develop主分支線,其他的分支都是臨時(shí)的分支,有一定的生命周期的,其余的工作流程分支都是圍繞這兩個(gè)分支之間的區(qū)別進(jìn)行的。

其他分支說(shuō)明

-新功能分支(Feature Branches)

每一個(gè)新的功能都應(yīng)該創(chuàng)建一個(gè)獨(dú)立的分支,從develop分支中派生出來(lái)。當(dāng)功能完成后,要合并(merged)回develop分支,合并后它的生命周期就結(jié)束。新功能分支不會(huì)與master分支有直接的交匯。如圖:

[圖片上傳失敗...(image-124599-1601368094316)]

Feature Branches

注意:對(duì)于所有意圖和目的,新功能分支會(huì)合并到develop分支。但是,這個(gè)Gitflow工作流不會(huì)在此結(jié)束。

-發(fā)布分支(Release Branches)

一旦開(kāi)發(fā)的功能已經(jīng)滿足發(fā)布條件(或預(yù)定發(fā)布日期接近),應(yīng)該合并所有滿足發(fā)布條件的新功能分支到develop分支中,然后,開(kāi)出一個(gè)發(fā)布分支(Release),開(kāi)始準(zhǔn)備一個(gè)發(fā)布版本。在這個(gè)分支上,不能再添加新的功能,只有bug修復(fù)和該版本為導(dǎo)向的任務(wù)。一旦到了發(fā)布日期,Release就要合并回master發(fā)布,并且,打出版本標(biāo)簽。另外,還需要合并回develop分支。

[圖片上傳失敗...(image-82c4c2-1601368094315)]

Release Branches

使用一個(gè)專門的分支來(lái)準(zhǔn)備發(fā)布版本,使得一個(gè)團(tuán)隊(duì)能對(duì)當(dāng)前版本進(jìn)行拋光,而另一個(gè)團(tuán)隊(duì)繼續(xù)為下一個(gè)版本的功能做準(zhǔn)備。它還創(chuàng)造了良好定義的發(fā)展階段(例如,很容易說(shuō),“本周我們正在準(zhǔn)備4.0版”,而且真實(shí)地看到它在庫(kù)中的結(jié)構(gòu))。

-維護(hù)分支(Maintenance Branches)

維護(hù)分支也就是線上bug修復(fù)分支,使用來(lái)快速修復(fù)生產(chǎn)環(huán)境的緊急問(wèn)題。

[圖片上傳失敗...(image-924d7a-1601368094315)]

Maintenance Branches

這個(gè)分支是唯一一個(gè)開(kāi)放過(guò)程中直接從master分支派生來(lái)的分支。快速的修復(fù)問(wèn)題后,它應(yīng)該被合并回master和develop(或者當(dāng)前發(fā)布分支),然后,master分支需要打一個(gè)版本標(biāo)簽。

一個(gè)專門的錯(cuò)誤修復(fù)開(kāi)發(fā)線,可以讓團(tuán)隊(duì)在不等待下一個(gè)發(fā)布周期,導(dǎo)致中斷工作流程情況下解決問(wèn)題。可以將維護(hù)分支當(dāng)做主要的問(wèn)題修復(fù)分支,與master并行。

命名約定

-主分支名稱:master

-主開(kāi)發(fā)分支名稱:develop

-標(biāo)簽(tag)名稱:v.RELEASE,其中”“ 為版本號(hào),“RELEASE”大寫(xiě),如:v1.0.0.RELEASE**

-新功能開(kāi)發(fā)分支名稱:feature-or feature/,其中“” 為新功能簡(jiǎn)述,如:feature-item-activity-list*

-發(fā)布分支名稱:release-or release/,其中為版本號(hào),“release”小寫(xiě),如:release-1.0.0*

-master的bug修復(fù)分支名稱:hotfix-or hotfix/,其中為bug簡(jiǎn)述,如:hotfix/item-update-bug*

工作流程

下面具體演示如何使用工作流來(lái)管理版本發(fā)布周期。假設(shè)我們已經(jīng)存在或創(chuàng)建了一個(gè)源碼中央存儲(chǔ)倉(cāng)庫(kù)。

工作流的基礎(chǔ)

創(chuàng)建develop分支

[圖片上傳失敗...(image-2d13a6-1601368094315)]

Create Develop Branch

-項(xiàng)目負(fù)責(zé)人在本地master基礎(chǔ)上創(chuàng)建一個(gè)develop分支,然后,推送到服務(wù)器;

git branch develop

git push -u origin develop

-其他開(kāi)發(fā)人員,需要克隆develop中央倉(cāng)庫(kù)的源碼,創(chuàng)建一個(gè)develop的軌跡版本;如果,已經(jīng)克隆過(guò)該項(xiàng)目,則,不需要執(zhí)行以下第一條命令。

git clone git@github.org:search-cloud/demo.git

git checkout -b develop origin/develop

develop這個(gè)分支將包含項(xiàng)目的完整歷史記錄,而master將包含縮略版本。

** 假設(shè)開(kāi)始以下所有的流程之前,都已經(jīng)創(chuàng)建好develop分支。**

新功能開(kāi)發(fā)流程

1.新建feature分支

[圖片上傳失敗...(image-6d39ef-1601368094315)]

Create Feature Branch

基于develop分支創(chuàng)建新功能分支:

git checkout -b feature/demo develop

推送到遠(yuǎn)程倉(cāng)庫(kù),共享:

git push

所有開(kāi)發(fā)此新功能的人員,都在此分支上開(kāi)發(fā)提交代碼。

git status

git add

git commit -m "Add some-file."

2.完成新功能開(kāi)發(fā)(合并feature分支到develop)

[圖片上傳失敗...(image-d27df4-1601368094315)]

Merge Feature to Develop

當(dāng)確定新功能開(kāi)發(fā)完成,且聯(lián)調(diào)測(cè)試通過(guò),并且新功能負(fù)責(zé)人已經(jīng)得到合并feature分支到develop分支的允許;這樣才能合并feature分支到develop。

git pull origin develop

git checkout develop

git merge feature/demo

git push

git branch -d feature/demo

第一條命令是確保在合并新功能之前,develop分支是最新的。

注意:

-新功能分支,永遠(yuǎn)不要直接合并到master分支。

-合并可能會(huì)有沖突,應(yīng)該謹(jǐn)慎處理沖突。

3.在測(cè)試環(huán)境發(fā)布develop分支代碼(提交測(cè)試)

線上版本發(fā)布流程

1.從develop中創(chuàng)建準(zhǔn)備發(fā)布的release分支

[圖片上傳失敗...(image-ed3e1f-1601368094315)]

Create Release Branch

當(dāng)主測(cè)試流程完成,源碼已經(jīng)趨近于穩(wěn)定狀態(tài),應(yīng)該準(zhǔn)備一個(gè)發(fā)布版本,確立版本號(hào):

git checkout -b release-0.1.0 develop

推送到遠(yuǎn)程倉(cāng)庫(kù)共享:

git push

這個(gè)分支是清理準(zhǔn)備發(fā)布、 整體回歸測(cè)試、 更新文檔,和做其他任何系統(tǒng)即將發(fā)布的事情。

2.繼續(xù)拋光改bug

3.release分支合并到master發(fā)布

[圖片上傳失敗...(image-cf4dd1-1601368094314)]

Merge Release to Master and Develop

一旦已經(jīng)滿足發(fā)布條件(或已經(jīng)到了預(yù)定發(fā)布日期),應(yīng)該把release分支合并到master分支和develop分支中,然后,使用master發(fā)布新版本。合并release分支到develop分支是很重要的,要讓release上修改的東西能在后續(xù)的開(kāi)發(fā)分支中生效。

git checkout master

git merge release-0.1.0

git push

4.release分支合并到develop

git checkout develop

git merge release-0.1.0

git push

git branch -d release-0.1.0

5.打標(biāo)簽

Release分支在功能開(kāi)發(fā)分支(develop)和公共發(fā)布版(master)中,充當(dāng)一個(gè)緩沖的作用。每當(dāng)有源碼合并到master中的時(shí)候,應(yīng)該在master上打一個(gè)標(biāo)簽,以便后續(xù)跟蹤查閱。

git tag -a 0.1.0.RELEASE -m "Initial public release" master

git push --tags

線上Bug修復(fù)流程

當(dāng)終端用戶,反饋系統(tǒng)有bug時(shí),為了處理bug,需要從master中創(chuàng)建出保養(yǎng)分支;等到bug修復(fù)完成,需要合并回master:

1.創(chuàng)建hotfix分支

git checkout -b issue-#001 master

2.修改bug Fix the bug

3.完成修復(fù),合并到master發(fā)布

[圖片上傳失敗...(image-8b6f79-1601368094313)]

Merge hotfix to Master

git checkout master

git merge issue-#001

git push

4.打標(biāo)簽

git tag -a 0.1.1.RELEASE -m "Initial public release" master

git push --tags

5.合并到develop

git checkout develop

git merge issue-#001

git push

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容