Git工作流(Gitflow)管理

一、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è)分支。

集中式工作模式圖.png

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

SVN的集中式工作流.png

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

Git結(jié)構(gòu)關(guān)系示意圖.png

Reomte表示服務(wù)器的遠(yuǎn)程倉庫,Repository表示本地倉庫,Workspace是我們的工作區(qū)。

2.2 Centralized Workflow的工作流程

  1. 從遠(yuǎn)程倉庫(central repository)克隆工程到本地倉庫(local repository) --- git clone
  2. 在本地倉庫編輯文件和提交更新 --- git add和git commit
  3. fetch遠(yuǎn)程倉庫已更新的commit到本地倉庫和rebase到已更新的commit的上面 --- git fetch和git rebase 或 git pull --rebase
  4. push本地主分支(master branch)到遠(yuǎn)程倉庫 --- git push

2.3 補(bǔ)充

Git本地倉庫結(jié)構(gòu)示意圖.png

上圖是整個(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分支。

Master&&Develop關(guān)系圖.png


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的流程

  1. 仍然使用遠(yuǎn)程倉庫(central repository)和主分支(master branch)仍記錄官方工程的歷史
  2. 開發(fā)者每次開發(fā)新功能時(shí)都創(chuàng)建一個(gè)新分支 --- git checkout -b
  3. Feature branches應(yīng)該推送到遠(yuǎn)程倉庫(central repository) --- git push
  4. 發(fā)送pull request來請求管理員能否合并到主分支(master branch)
  5. 發(fā)布新功能到遠(yuǎn)程倉庫(central repository)
Feature Branch示意圖.png

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)行版本記錄。

Git 日志Historical Branch示意圖.png

上圖為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使用說明。

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

相關(guān)閱讀更多精彩內(nèi)容

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