1.git-flow 說明
一旦安裝安裝 git-flow坟漱,你將會擁有一些擴(kuò)展命令渠抹。這些命令會在一個預(yù)定義的順序下自動執(zhí)行多個操作视哑。
git-flow 并不是要替代 Git阵面,它僅僅是非常聰明有效地把標(biāo)準(zhǔn)的 Git 命令用腳本組合了起來轻局。
git-flow把分支劃分了幾個類別
Master
就是平時我們看到的master,項目的主要分支样刷,可以把它理解成 穩(wěn)定無bug發(fā)布版 仑扑。(任何時候都ready to deploy)
所以,git-flow 要求我們不能在master下做開發(fā)置鼻。
Develop
處于功能開發(fā)最前線的版本镇饮,查看develop分支就能知道下一個發(fā)布版有哪些功能了。
develop一開始是從master里分出來的沃疮,并且定期會合并到master里盒让,
每一次合并到master梅肤,表示我們完成了一個階段的開發(fā)司蔬,產(chǎn)生一個穩(wěn)定版。
同樣的姨蝴,develop下也不建議直接開發(fā)代碼俊啼,develop代表的是已經(jīng)開發(fā)好的功能
Feature
feature的作用是為每一個新功能從develop里創(chuàng)建出來的一個分支。
例如A和B分別做兩個功能左医,一個為人臉識別授帕,一個為綁卡界面同木。就可以創(chuàng)建兩個分支,各自開發(fā)完以后跛十,先后合并到develop里彤路,這就叫做回歸。
在這個過程里芥映,A 和 B不需要任何的溝通洲尊,分別并行地開發(fā),
git-flow能很好的處理好分支間并行開發(fā)的關(guān)系奈偏。
而develop坞嘀,則會在適當(dāng)?shù)臅r候,由合適的人惊来,合并到master丽涩,作為下一個穩(wěn)定版本。
Hotfix
以上3種以外裁蚁,還有一個很重要的類型矢渊,hotfix。
它是用來修復(fù)緊急bug的枉证,而bug通常是來自線上的昆淡,
所以hotfix分支是從master里創(chuàng)建出來的,并且刽严,在bug修改好以后昂灵,
要同時合并到master和develop,這一點(diǎn)需要特別注意舞萄。
Release
release更多傾向與版本發(fā)布眨补,項目上線前的一些全面測試以及上線準(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甘晤,從初始化一個現(xiàn)有的 git 庫內(nèi)開始:
git flow init
你必須回答幾個關(guān)于分支的命名約定的問題。
增加新功能
新功能的開發(fā)是基于 'develop' 分支的线婚。
通過下面的命令開始開發(fā)新功能 比如人臉識別功能:
git flow feature start MYFEATURE
這個操作創(chuàng)建了一個基于'develop'的特性分支,并切換到這個分支之下盆均。
完成開發(fā)新功能龄坪。這個動作執(zhí)行下面的操作.
合并 MYFEATURE 分支到 'develop'
刪除這個新特性分支
切換回 'develop' 分支
git flow feature finish MYFEATURE
最重要的是陷揪,這個 “feature finish” 命令會把我們的工作整合到主 “develop” 分支中去释树。在這里它需要等待:
一個在更廣泛的 “開發(fā)” 背景下的全面測試。
稍后和所有積攢在 “develop” 分支中的其它功能一起進(jìn)行發(fā)布饰抒。
之后,git-flow 也會進(jìn)行清理操作诀黍。它會刪除這個當(dāng)下已經(jīng)完成的功能分支袋坑,并且換到 “develop” 分支。
完成提交之后.png
合作開發(fā)一項新功能
可以發(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)是一個成熟的 release 版本時,這意味著:第一模叙,它包括所有新的功能和必要的修復(fù)歇拆;第二,它已經(jīng)被徹底的測試過了范咨。如果上述兩點(diǎn)都滿足故觅,那就是時候開始生成一個新的 release 了
開始準(zhǔn)備release版本,使用 git flow release
命令.
它從 'develop' 分支開始創(chuàng)建一個 release 分支
請注意渠啊,release 分支是使用版本號命名的输吏。這是一個明智的選擇,這個命名方案還有一個很好的附帶功能替蛉,那就是當(dāng)我們完成了release 后贯溅,git-flow 會適當(dāng)?shù)?em>自動去標(biāo)記那些 release 提交。
有了一個 release 分支躲查,再完成針對 release 版本號的最后準(zhǔn)備工作(如果項目里的某些文件需要記錄版本號)它浅,并且進(jìn)行最后的編輯。![發(fā)布 release](/Users/Yan/Desktop/圖片/發(fā)布 release.png)
完成 release
現(xiàn)在是時候按下那個危險的紅色按鈕來完成我們的release了:
git flow release finish 3.6.0
這個命令會完成如下一系列的操作:
首先镣煮,git-flow 會拉取遠(yuǎn)程倉庫姐霍,以確保目前是最新的版本。
然后典唇,release 的內(nèi)容會被合并到 “master” 和 “develop” 兩個分支中去镊折,這樣不僅產(chǎn)品代碼為最新的版本,而且新的功能分支也將基于最新代碼介衔。
為便于識別和做歷史參考恨胚,release 提交會被標(biāo)記上這個 release 的名字(在我們的例子里是 “3.6.0”)。
清理操作夜牡,版本分支會被刪除与纽,并且回到 “develop”。
從 Git 的角度來看塘装,release 版本現(xiàn)在已經(jīng)完成急迂。依據(jù)你的設(shè)置,對 “master” 的提交可能已經(jīng)觸發(fā)了你所定義的部署流程
hotfix
很多時候蹦肴,僅僅在幾個小時或幾天之后僚碎,當(dāng)對 release 版本作做全面測試時,可能就會發(fā)現(xiàn)一些小錯誤阴幌。
在這種情況下勺阐,git-flow 提供一個特定的 “hotfix” 工作流程(因?yàn)樵谶@里不管使用 “功能” 分支流程,還是 “release” 分支流程都是不恰當(dāng)?shù)模?/p>
創(chuàng)建 Hotfixes
$ git flow hotfix start missing-link
這個命令會創(chuàng)建一個名為 “hotfix/missing-link” 的分支矛双。因?yàn)檫@是對產(chǎn)品代碼進(jìn)行修復(fù)渊抽,所以這個 hotfix 分支是基于 “master” 分支。
這也是和 release 分支最明顯的區(qū)別议忽,release 分支都是基于 “develop” 分支的懒闷。因?yàn)槟悴粦?yīng)該在一個還不完全穩(wěn)定的開發(fā)分支上對產(chǎn)品代碼進(jìn)行地修復(fù)。
就像 release 一樣栈幸,修復(fù)這個錯誤當(dāng)然也會直接影響到項目的版本號愤估!
完成 Hotfixes
在把我們的修復(fù)提交到 hotfix 分支之后,就該去完成它了:
$ git flow hotfix finish missing-link
這個過程非常類似于發(fā)布一個 release 版本:
- 完成的改動會被合并到 “master” 中速址,同樣也會合并到 “develop” 分支中玩焰,這樣就可以確保這個錯誤不會再次出現(xiàn)在下一個 release 中。
- 這個 hotfix 程序?qū)⒈粯?biāo)記起來以便于參考芍锚。
- 這個 hotfix 分支將被刪除昔园,然后切換到 “develop” 分支上去。
還是和產(chǎn)生 release 的流程一樣并炮,現(xiàn)在需要編譯和部署你的產(chǎn)品(如果這些操作不是自動被觸發(fā)的話)蒿赢。
git-flow 并不會為 Git 擴(kuò)展任何新的功能,它僅僅使用了腳本來捆綁了一系列 Git 命令來完成一些特定的工作流程渣触。