什么是GitFlow
GitFlow是Git的一種分支模式。因為能夠非常好的適應(yīng)團隊開發(fā),正在變得越來越流行肛冶。
這個模式來源于Vincent Driessen的一篇文章GitFlow
優(yōu)點
- 并行開發(fā)
- 團隊合作
- 階段式發(fā)布
- 應(yīng)急處理
工作流程
是時候貼出這張著名的圖片了:)
GitFlow
來仔細地看看這張圖里的內(nèi)容。
- 剛開始的時候有一個origin/master分支,tag為0.1厘贼。master是發(fā)布的主分支。其HEAD總是指向準(zhǔn)備發(fā)布的代碼圣拄。tag可以視作版本嘴秸。
- 剛開始的時候有一個origin/develop分支。develop分支是開發(fā)的主分支庇谆。其HEAD總是指向下一次準(zhǔn)備發(fā)布的最新代碼岳掐。也有人將develop分支稱之為集成分支,因為集成測試基本都上根據(jù)這個分支的最新代碼來做饭耳。
- 現(xiàn)在需要開發(fā)新的功能串述,所以從develop分支拉出了一個feature分支.
git checkout -b feature/feature1 develop
- 在這個新功能開發(fā)完后,代碼需要合并到develop上
git checkout develop
git merge --no-ff feature/feature1
- 有些新功能沒有開發(fā)完寞肖,或者這次上線不需要纲酗,暫時不merge到develop中。
- 要上線的功能都已經(jīng)基本開發(fā)完成新蟆,需要測試觅赊,部署。這個時候從develop最新版本中拉出一個release分支
git checkout develop
git pull
git checkout -b release/v0.2 develop
- 在測試的過程中發(fā)現(xiàn)了bug琼稻,或者可能有些功能還沒有開發(fā)(個人感覺沒有開發(fā)完的功能也可以看成是一個bug⊙ . ⊙)茉兰,需要修復(fù)。這個時候需要從最新的release分支中拉出新的feature分支欣簇。
git checkout -b feature/fix_bug release/v0.2
在解決問題后规脸,分別merge到develop和release分支。
git checkout develop
git merge --no-ff feature/fix_bug
git checkout release/v0.2
git merge --no-ff feature/fix_bug
可以看到feature分支可能從develop拉出來熊咽,但是最后必須merge到develop分支莫鸭。
- 經(jīng)過一系列的測試之后,終于決定發(fā)布新版本了横殴。這個時候?qū)⒆钚碌膔elease分支merge到master分支被因,并打出最新的tag。
git checkout master
git merge --no-ff release/v0.2
git tag -a 0.2
- 在上線之后衫仑,如果發(fā)現(xiàn)了一個bug需要修復(fù)梨与,這時從master分支中拉出一個hotfix分支。
git checkout master
git checkout -b hotfix/fix_bug2 master
在解決掉問題后文狱,將該hotfix分支分別merge到develop分支和master分支粥鞋,并打出新的tag
git checkout master
git merge --no-ff hotfix/fix_bug2
git tag -a 0.2.1
git checkout develop
git merge --no-ff hotfix/fix_bug2
后面再出現(xiàn)bug也按照同樣的流程處理。
- 回到develop分支重復(fù)上面的流程瞄崇。
整個GitFLow的大致流程大概就是這樣呻粹。
在工作中采用這套流程一段時間后壕曼,個人體會,這是一套非车茸牵科學(xué)腮郊,規(guī)范的流程。嚴格遵守流程進行項目的開發(fā)筹燕,可以在項目管理上省下不少心思轧飞。
至于在操作中可能出現(xiàn)的沖突等問題,已經(jīng)不是GitFlow需要解決的問題撒踪,更多應(yīng)該去看官方文檔过咬。