一糕韧、Gitflow工作流概述
工作流(Workflow),指“業(yè)務(wù)過程的部分或整體在計算機應(yīng)用環(huán)境下的自動化”。是對工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象页滚、概括描述铺呵。
Gitflow裹驰,研發(fā)工作過程中,通過使用git進行代碼管理幻林、版本維護的工作流躏敢。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一樣赦役,集中式工作流以中央倉庫作為項目所有修改的單點實體麻敌。相比SVN缺省的開發(fā)分支trunk,Git叫做master掂摔,所有修改提交到這個分支上术羔。舉個例子,本工作流只用到master這一個分支乙漓。
上圖描述的是级历,多人協(xié)作開發(fā),代碼通過SVN集中式管理叭披,所有人的代碼都提交到同一個遠程倉庫寥殖。
上圖描述的是,本地代碼push到遠程倉庫后趋观,遠程倉庫代碼的變化扛禽。
Reomte表示服務(wù)器的遠程倉庫,Repository表示本地倉庫皱坛,Workspace是我們的工作區(qū)编曼。
2.2 Centralized Workflow的工作流程
- 從遠程倉庫(central repository)克隆工程到本地倉庫(local repository) --- git clone
- 在本地倉庫編輯文件和提交更新 --- git add和git commit
- fetch遠程倉庫已更新的commit到本地倉庫和rebase到已更新的commit的上面 --- git fetch和git rebase 或 git pull --rebase
- push本地主分支(master branch)到遠程倉庫 --- git push
2.3 補充
上圖是整個項目只有master分支時,本地倉庫的結(jié)構(gòu)剩辟。
三掐场、Branch Workflow往扔,分支工作流
3.1 Branch Workflow概述
Branch Workflow是本片文章講述的重點,以下是對Branch Workflow的概念的一些非官方的個人講述(如有紕漏請指正)熊户。
Git為我們提供了強大的代碼分支管理功能萍膛,我們可以通過git命令非常快捷方便地創(chuàng)建嚷堡、刪除蝗罗、合并分支。在我們管理分支的過程中需要遵循一定的流程蝌戒,這些流程并不是已開始就定義的好的串塑,而是在不斷工作實踐的過程中得出的寶貴經(jīng)驗。
Branch Workflow的成員如下:
- Feature Branches
- Release Branches
- Maintenance Branches
- Historical Branches
- Master Branch
- Develop Branch
3.2 Master && Develop
Master分支和Develop在git代碼管理中式必不可少的兩個重要分支北苟,其中Master分支是受保護的默認分支桩匪,只有項目的master才能夠進行commit等操作。Develop分支是從Master分支遷出來的第一個分支友鼻,是以后開發(fā)工作中的代碼標(biāo)準(zhǔn)傻昙。其他開發(fā)分支的代碼都要merge到Develop分支進行測試和發(fā)版。是發(fā)開過程中的其他所有分支的父分支彩扔。通常情況下妆档,不允許直接修改Master分支,所有的代碼都必須要通過Develop分支才能合并到Master分支虫碉。
3.3 Feature Branches过吻,功能分支
Feature Branch Workflow的主要思想就是在開發(fā)每個功能時都應(yīng)該創(chuàng)建一個獨立的分支而不只是使用主分支。由于每個分支是獨立且互不影響蔗衡,這就意味著主分支不會包含broken code,對持續(xù)集成環(huán)境是很有幫助的乳绕。
Feature Branch Workflow的流程
- 仍然使用遠程倉庫(central repository)和主分支(master branch)仍記錄官方工程的歷史
- 開發(fā)者每次開發(fā)新功能時都創(chuàng)建一個新分支 --- git checkout -b
- Feature branches應(yīng)該推送到遠程倉庫(central repository) --- git push
- 發(fā)送pull request來請求管理員能否合并到主分支(master branch)
- 發(fā)布新功能到遠程倉庫(central repository)
3.4 Maintenance Branches绞惦,維護分支
Maintenance Branches一般用來對產(chǎn)品進行功能微調(diào)和快速修復(fù)bug。它是除了Develop分支之外洋措,唯一可以從master分支直接衍生出來的分支济蝉;一旦完成修復(fù)bug,它應(yīng)該合并回master分支和develop分支菠发;master應(yīng)該被標(biāo)記一個新的版本號王滤。
3.5 Release Branches,發(fā)版分支
- release分支主要用來清理釋放滓鸠、測試和更新文檔
- 一旦develop分支獲得足夠的功能來發(fā)布時雁乡,你可以從develop衍生出一個release分支
- 一旦準(zhǔn)備好上架,release合并到master分支并且標(biāo)記一個版本號
- 另外糜俗,還需要合并回develop分支
3.6 Historical Branch
用來記錄發(fā)版歷史的分支踱稍,此角色通常由Master分支擔(dān)任曲饱,也可以在每次發(fā)版后切出一個分支保存版本代碼,現(xiàn)在通常使用tag來進行版本記錄珠月。
上圖為Gitflow整體示意圖扩淀,其中HotFix表示Maintenance Branch。
四啤挎、參考文獻
http://www.admin10000.com/document/6377.html
http://www.reibang.com/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玫剑绻信d趣可以查看github使用說明庆聘。