Git Flow是一套基於git的工做流程,這個工做流程圍繞着project的發佈(release)定義了一個嚴格的如何創建分支的模型。git
Git建分支是很是cheap的,咱們能夠任意創建分支,對任意分支再分支,分支開發完後再合併。github
比較推薦、多見的作法是特性驅動(Feature Driven)的創建分支法(Feature Branch Workflow)。bash
簡而言之就是每個特性(feature)的開發並不直接在主幹上開發,而是在分支上開發,分支開發完畢後再合併到主幹上。服務器
這樣作的好處是工具
還處於半成品狀態的feature不會影響到主幹post
各個開發人員之間作本身的分支,互不干擾測試
主幹永遠處於可編譯、可運行的狀態spa
GitFlow則在這個基礎上更進一步,規定了如何創建、合併分支,如何發佈,如何維護歷史版本等工做流程。code
master分支只存放歷史發佈(release)版本的源代碼。各個版本經過tag來標記。上圖裏的v0.1和v0.2就是tag。blog
develop分支則用來整合各個feature分支。開發中的版本的源代碼存放在這裏。
每個特性(feature)都必須在本身的分支裏開發,feature分支派生自develop分支。
當feature開發完畢後,要合併回develop分支。feature分支永遠不會和master分支打交道。
release分支不是一個放正式發佈產品的分支,你能夠將它理解爲「待發布」分支。
咱們用這個分支幹全部和發佈有關的事情,好比:
把這個分支打包給測試人員測試
在這個分支裏修復bug
編寫發佈文檔
因此在這個分支裏面絕對不會添加新的特性。
當和發佈相關的工做都完成後,release分支合併回develop和master分支。
單獨搞一個release分支的好處是,當一個團隊在作發佈相關的工做時,另外一個團隊則能夠接着開發下一版本的東西。
一個項目發佈後或多或少確定會有一些bug存在,而bug的修復工做並不適合在develop上作,這是由於
develop分支上包含還未驗證過的feature
用戶未必須要develop上的feature
develop還不能立刻發佈,而客戶急需這個bug的修復。
這時就須要新建hotfix分支,hotfix分支派生自master分支,僅僅用於修復bug,當bug修復完畢後,立刻迴歸到master分支,而後發佈一個新版本,好比v0.1.1。
同時hotfix也要合併回develop分支,這樣develop分支就能享受到bug修復的好處了。
Git Flow不單單是一種規範,還提供了一套方便的工具。大大簡化了執行Git Flow的過程。
$ brew install git-flow
$ apt-get install git-flow
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
對一個git倉庫配置一下git flow。主要是一些命名規範,好比feature分支的前綴,hotfix分支的前綴等。通常用默認值就行。
git flow init
從develop開啓一個新的分支
git flow feature start MYFEATURE
這個命令會從develop分出一個分支,而後切換到這個分支上面。
一個feature分支開發完畢後,要作如下事情:
把 MYFEATURE 合併到 develop
把這個分支幹掉
切換回develop分支
git flow feature finish FEATURE_NAME
若是你想讓別人和你一塊兒開發MYFEATURE分支,那就把這個分支push到服務器上
git flow feature publish MYFEATURE
得到一個別人publish到服務器上的feature分支
git flow feature pull origin MYFEATURE
建立一個release分支,派生自develop分支。
git flow release start RELEASE
git flow release publish RELEASE
一個release分支結束後,須要作如下工做:
把release分支合併回master
給本次發佈打tag
同時把release分支合併回develop
幹掉release分支
git flow release finish RELEASE
最後不要忘記把tag push到服務器git push --tags
開啓一個hotfix分支
git flow hotfix start VERSION
結束一個hotfix分支,和release同樣,同時合併回develop和master
git flow hotfix finish VERSION