一、Gitflow工作流概述
工作流(Workflow),指“業(yè)務(wù)過程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化”。是對(duì)工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象、概括描述。
Gitflow,研發(fā)工作過程中,通過使用git進(jìn)行代碼管理、版本維護(hù)的工作流。Gitflow包含以下幾種工作流:
- Centralized Workflow,集中式工作流
- Branch Workflow,分支工作流
- Forking Workflow,F(xiàn)ork工作流
二、Centralized Workflow,集中式工作流
Git的Centralized Workflow非常友好地過度了SubVersion中的集中式工作流,熟悉SVN工作流程的開發(fā)者在這方面可以非常容易地掌握Git中的這一工作流。
2.1 Centralized Workflow的概念
像Subversion一樣,集中式工作流以中央倉庫作為項(xiàng)目所有修改的單點(diǎn)實(shí)體。相比SVN缺省的開發(fā)分支trunk,Git叫做master,所有修改提交到這個(gè)分支上。舉個(gè)例子,本工作流只用到master這一個(gè)分支。

上圖描述的是,多人協(xié)作開發(fā),代碼通過SVN集中式管理,所有人的代碼都提交到同一個(gè)遠(yuǎn)程倉庫。

上圖描述的是,本地代碼push到遠(yuǎn)程倉庫后,遠(yuǎn)程倉庫代碼的變化。

Reomte表示服務(wù)器的遠(yuǎn)程倉庫,Repository表示本地倉庫,Workspace是我們的工作區(qū)。
2.2 Centralized Workflow的工作流程
- 從遠(yuǎn)程倉庫(central repository)克隆工程到本地倉庫(local repository) --- git clone
- 在本地倉庫編輯文件和提交更新 --- git add和git commit
- fetch遠(yuǎn)程倉庫已更新的commit到本地倉庫和rebase到已更新的commit的上面 --- git fetch和git rebase 或 git pull --rebase
- push本地主分支(master branch)到遠(yuǎn)程倉庫 --- git push
2.3 補(bǔ)充

上圖是整個(gè)項(xiàng)目只有master分支時(shí),本地倉庫的結(jié)構(gòu)。
三、Branch Workflow,分支工作流
3.1 Branch Workflow概述
Branch Workflow是本片文章講述的重點(diǎn),以下是對(duì)Branch Workflow的概念的一些非官方的個(gè)人講述(如有紕漏請指正)。
Git為我們提供了強(qiáng)大的代碼分支管理功能,我們可以通過git命令非常快捷方便地創(chuàng)建、刪除、合并分支。在我們管理分支的過程中需要遵循一定的流程,這些流程并不是已開始就定義的好的,而是在不斷工作實(shí)踐的過程中得出的寶貴經(jīng)驗(yàn)。
Branch Workflow的成員如下:
- Feature Branches
- Release Branches
- Maintenance Branches
- Historical Branches
- Master Branch
- Develop Branch
3.2 Master && Develop
Master分支和Develop在git代碼管理中式必不可少的兩個(gè)重要分支,其中Master分支是受保護(hù)的默認(rèn)分支,只有項(xiàng)目的master才能夠進(jìn)行commit等操作。Develop分支是從Master分支遷出來的第一個(gè)分支,是以后開發(fā)工作中的代碼標(biāo)準(zhǔn)。其他開發(fā)分支的代碼都要merge到Develop分支進(jìn)行測試和發(fā)版。是發(fā)開過程中的其他所有分支的父分支。通常情況下,不允許直接修改Master分支,所有的代碼都必須要通過Develop分支才能合并到Master分支。

3.3 Feature Branches,功能分支
Feature Branch Workflow的主要思想就是在開發(fā)每個(gè)功能時(shí)都應(yīng)該創(chuàng)建一個(gè)獨(dú)立的分支而不只是使用主分支。由于每個(gè)分支是獨(dú)立且互不影響,這就意味著主分支不會(huì)包含broken code,對(duì)持續(xù)集成環(huán)境是很有幫助的。
Feature Branch Workflow的流程
- 仍然使用遠(yuǎn)程倉庫(central repository)和主分支(master branch)仍記錄官方工程的歷史
- 開發(fā)者每次開發(fā)新功能時(shí)都創(chuàng)建一個(gè)新分支 --- git checkout -b
- Feature branches應(yīng)該推送到遠(yuǎn)程倉庫(central repository) --- git push
- 發(fā)送pull request來請求管理員能否合并到主分支(master branch)
- 發(fā)布新功能到遠(yuǎn)程倉庫(central repository)

3.4 Maintenance Branches,維護(hù)分支
Maintenance Branches一般用來對(duì)產(chǎn)品進(jìn)行功能微調(diào)和快速修復(fù)bug。它是除了Develop分支之外,唯一可以從master分支直接衍生出來的分支;一旦完成修復(fù)bug,它應(yīng)該合并回master分支和develop分支;master應(yīng)該被標(biāo)記一個(gè)新的版本號(hào)。
3.5 Release Branches,發(fā)版分支
- release分支主要用來清理釋放、測試和更新文檔
- 一旦develop分支獲得足夠的功能來發(fā)布時(shí),你可以從develop衍生出一個(gè)release分支
- 一旦準(zhǔn)備好上架,release合并到master分支并且標(biāo)記一個(gè)版本號(hào)
- 另外,還需要合并回develop分支
3.6 Historical Branch
用來記錄發(fā)版歷史的分支,此角色通常由Master分支擔(dān)任,也可以在每次發(fā)版后切出一個(gè)分支保存版本代碼,現(xiàn)在通常使用tag來進(jìn)行版本記錄。

上圖為Gitflow整體示意圖,其中HotFix表示Maintenance Branch。
四、參考文獻(xiàn)
http://www.admin10000.com/document/6377.html
http://www.itdecent.cn/p/91acec85c3a4
http://blog.csdn.net/dengsilinming/article/details/8000622
http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
http://www.cnblogs.com/muzhifeike/p/5869217.html
五、Forking Branch說明
Forking Branch在我們?nèi)粘9ぷ髦胁⒉怀S玫?,如果有興趣可以查看github使用說明。