1.git-flow 說明
一旦安裝安裝 git-flow,你將會(huì)擁有一些擴(kuò)展命令。這些命令會(huì)在一個(gè)預(yù)定義的順序下自動(dòng)執(zhí)行多個(gè)操作。
git-flow 并不是要替代 Git,它僅僅是非常聰明有效地把標(biāo)準(zhǔn)的 Git 命令用腳本組合了起來。
git-flow把分支劃分了幾個(gè)類別
Master
就是平時(shí)我們看到的master,項(xiàng)目的主要分支,可以把它理解成 穩(wěn)定無bug發(fā)布版 。(任何時(shí)候都ready to deploy)
所以,git-flow 要求我們不能在master下做開發(fā)。
Develop
處于功能開發(fā)最前線的版本,查看develop分支就能知道下一個(gè)發(fā)布版有哪些功能了。
develop一開始是從master里分出來的,并且定期會(huì)合并到master里,
每一次合并到master,表示我們完成了一個(gè)階段的開發(fā),產(chǎn)生一個(gè)穩(wěn)定版。
同樣的,develop下也不建議直接開發(fā)代碼,develop代表的是已經(jīng)開發(fā)好的功能
Feature
feature的作用是為每一個(gè)新功能從develop里創(chuàng)建出來的一個(gè)分支。
例如A和B分別做兩個(gè)功能,一個(gè)為人臉識(shí)別,一個(gè)為綁卡界面。就可以創(chuàng)建兩個(gè)分支,各自開發(fā)完以后,先后合并到develop里,這就叫做回歸。
在這個(gè)過程里,A 和 B不需要任何的溝通,分別并行地開發(fā),
git-flow能很好的處理好分支間并行開發(fā)的關(guān)系。
而develop,則會(huì)在適當(dāng)?shù)臅r(shí)候,由合適的人,合并到master,作為下一個(gè)穩(wěn)定版本。
Hotfix
以上3種以外,還有一個(gè)很重要的類型,hotfix。
它是用來修復(fù)緊急bug的,而bug通常是來自線上的,
所以hotfix分支是從master里創(chuàng)建出來的,并且,在bug修改好以后,
要同時(shí)合并到master和develop,這一點(diǎn)需要特別注意。
Release
release更多傾向與版本發(fā)布,項(xiàng)目上線前的一些全面測(cè)試以及上線準(zhǔn)備。
同樣也肩負(fù)著版本歸檔,回滾支持等

2.git-flow 安裝
1.Mac下安裝
通過 homebrew 安裝
在終端執(zhí)行``brew install git-flow-avh```
2.windows下安裝
wget -q -O - --no-check-certificate https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh install stable | bash
安裝 git-flow, 你需要 wget 和 util-linux。PS:我沒有 windows,也沒實(shí)踐過。
3.開始使用
初始化
使用 git-flow,從初始化一個(gè)現(xiàn)有的 git 庫內(nèi)開始:
git flow init
你必須回答幾個(gè)關(guān)于分支的命名約定的問題。

增加新功能
新功能的開發(fā)是基于 'develop' 分支的。
通過下面的命令開始開發(fā)新功能 比如人臉識(shí)別功能:
git flow feature start MYFEATURE
這個(gè)操作創(chuàng)建了一個(gè)基于'develop'的特性分支,并切換到這個(gè)分支之下。
完成開發(fā)新功能。這個(gè)動(dòng)作執(zhí)行下面的操作.
合并 MYFEATURE 分支到 'develop'
刪除這個(gè)新特性分支
切換回 'develop' 分支
git flow feature finish MYFEATURE
最重要的是,這個(gè) “feature finish” 命令會(huì)把我們的工作整合到主 “develop” 分支中去。在這里它需要等待:
一個(gè)在更廣泛的 “開發(fā)” 背景下的全面測(cè)試。
稍后和所有積攢在 “develop” 分支中的其它功能一起進(jìn)行發(fā)布。
之后,git-flow 也會(huì)進(jìn)行清理操作。它會(huì)刪除這個(gè)當(dāng)下已經(jīng)完成的功能分支,并且換到 “develop” 分支。
完成提交之后.png

合作開發(fā)一項(xiàng)新功能
可以發(fā)布新功能分支到遠(yuǎn)程服務(wù)器,這樣,其它用戶也可以使用這分支
git flow feature publish MYFEATURE
取得其它用戶發(fā)布的新特性分支,并簽出遠(yuǎn)程的變更。
git flow feature pull origin MYFEATURE
可以使用 git flow feature track MYFEATURE 跟蹤在origin上的特性分支。
發(fā)布 release 版本
當(dāng)你認(rèn)為現(xiàn)在在 “develop” 分支的代碼已經(jīng)是一個(gè)成熟的 release 版本時(shí),這意味著:第一,它包括所有新的功能和必要的修復(fù);第二,它已經(jīng)被徹底的測(cè)試過了。如果上述兩點(diǎn)都滿足,那就是時(shí)候開始生成一個(gè)新的 release 了
開始準(zhǔn)備release版本,使用 git flow release命令.
它從 'develop' 分支開始創(chuàng)建一個(gè) release 分支
請(qǐng)注意,release 分支是使用版本號(hào)命名的。這是一個(gè)明智的選擇,這個(gè)命名方案還有一個(gè)很好的附帶功能,那就是當(dāng)我們完成了release 后,git-flow 會(huì)適當(dāng)?shù)?em>自動(dòng)去標(biāo)記那些 release 提交。
有了一個(gè) release 分支,再完成針對(duì) release 版本號(hào)的最后準(zhǔn)備工作(如果項(xiàng)目里的某些文件需要記錄版本號(hào)),并且進(jìn)行最后的編輯。布 release.png)
完成 release
現(xiàn)在是時(shí)候按下那個(gè)危險(xiǎn)的紅色按鈕來完成我們的release了:
git flow release finish 3.6.0

這個(gè)命令會(huì)完成如下一系列的操作:
首先,git-flow 會(huì)拉取遠(yuǎn)程倉庫,以確保目前是最新的版本。
然后,release 的內(nèi)容會(huì)被合并到 “master” 和 “develop” 兩個(gè)分支中去,這樣不僅產(chǎn)品代碼為最新的版本,而且新的功能分支也將基于最新代碼。
為便于識(shí)別和做歷史參考,release 提交會(huì)被標(biāo)記上這個(gè) release 的名字(在我們的例子里是 “3.6.0”)。
清理操作,版本分支會(huì)被刪除,并且回到 “develop”。
從 Git 的角度來看,release 版本現(xiàn)在已經(jīng)完成。依據(jù)你的設(shè)置,對(duì) “master” 的提交可能已經(jīng)觸發(fā)了你所定義的部署流程
hotfix
很多時(shí)候,僅僅在幾個(gè)小時(shí)或幾天之后,當(dāng)對(duì) release 版本作做全面測(cè)試時(shí),可能就會(huì)發(fā)現(xiàn)一些小錯(cuò)誤。
在這種情況下,git-flow 提供一個(gè)特定的 “hotfix” 工作流程(因?yàn)樵谶@里不管使用 “功能” 分支流程,還是 “release” 分支流程都是不恰當(dāng)?shù)模?/p>
創(chuàng)建 Hotfixes
$ git flow hotfix start missing-link

這個(gè)命令會(huì)創(chuàng)建一個(gè)名為 “hotfix/missing-link” 的分支。因?yàn)檫@是對(duì)產(chǎn)品代碼進(jìn)行修復(fù),所以這個(gè) hotfix 分支是基于 “master” 分支。
這也是和 release 分支最明顯的區(qū)別,release 分支都是基于 “develop” 分支的。因?yàn)槟悴粦?yīng)該在一個(gè)還不完全穩(wěn)定的開發(fā)分支上對(duì)產(chǎn)品代碼進(jìn)行地修復(fù)。
就像 release 一樣,修復(fù)這個(gè)錯(cuò)誤當(dāng)然也會(huì)直接影響到項(xiàng)目的版本號(hào)!
完成 Hotfixes
在把我們的修復(fù)提交到 hotfix 分支之后,就該去完成它了:
$ git flow hotfix finish missing-link

這個(gè)過程非常類似于發(fā)布一個(gè) release 版本:
- 完成的改動(dòng)會(huì)被合并到 “master” 中,同樣也會(huì)合并到 “develop” 分支中,這樣就可以確保這個(gè)錯(cuò)誤不會(huì)再次出現(xiàn)在下一個(gè) release 中。
- 這個(gè) hotfix 程序?qū)⒈粯?biāo)記起來以便于參考。
- 這個(gè) hotfix 分支將被刪除,然后切換到 “develop” 分支上去。
還是和產(chǎn)生 release 的流程一樣,現(xiàn)在需要編譯和部署你的產(chǎn)品(如果這些操作不是自動(dòng)被觸發(fā)的話)。
git-flow 并不會(huì)為 Git 擴(kuò)展任何新的功能,它僅僅使用了腳本來捆綁了一系列 Git 命令來完成一些特定的工作流程。