Git flow 筆記
2017-09-26
前言
在公司開發專案的時候,同事剛好需要開發一個新的feature,而這個feature需要必較久的時間才能回到master,此時我們重新檢視了原來使用的開發流Github Flow 是不是有什麼缺點,並且也討論到如果轉到Git flow是否能解決現況下遇到的問題。
簡介
Flow 翻成中文是 『水流』的意思,這裡我們可以理解成工作流程,就像水流似的順暢流動。
廣泛被使用的工作流有三種:
- Git flow
- Github flow
- Gitlab flow
而本文主要把重點放在Git flow。
Git 雖然方便好用,但並沒有提出一套管理分支的方法,而國外有大大整理出一套方法: A successful Git branching model,而這套方法就是大家熟知的Git flow。
Git flow 的主要概念就是他有兩個主要的branch
分別為master 和 develop
develop是負責開發的分支,而master是給production用的
而次要分支有feature, release 跟hotfix
第一次看到這張圖可能會被嚇到吧www ,但這張圖其實沒有想像中的複雜,只比前一張圖多了三個次要分支。
接下來就一一來介紹他們~
首先是feature 分支,使用時機是只要是開發新功能的時候, 就開新的feature 分支,而當此feature 分支開發完後, 就將它 merge 回 develop 分支。
再來是release 分支,使用時機是在送出下一版前要修正bug的時候, 此時就開新的release 分支,而當此release 分支開發完後,讓他同時回到develop 還有 master 分支。
而至於hotfix 分支使用的時機則是在修已上production 後臨時要修bug時,當hotfix 分支開發完後,讓他同時回到develop 還有 master 分支。
教學
由於Git flow 不是Git 裡原有的功能,所以我們需要另外安裝作者所提供的gitflow 工具。
而這裡就以Mac OS X來做教學,並假設你有裝homebrew。
安裝
$ brew install git-flow
為專案加入Git flow
$ git flow init
建立分支
feature
列出所有的feature branch
$ git flow feature
開啟新的 feature branch
$ git flow feature start <name>
- name 為你想要的feature 分支名稱
結束feature branch
$ git flow feature finish <name>
- name 為你想要結束的分支名稱
- feature 分支完成後會被 merge進 develop 分支
把feature 分支 推到 remote
$ git flow feature publish <name>
- name 為你想要推的分支名稱
把remote的 feature 分支拉下來
$ git flow feature pull <remote> <name>
- remote 通常是 origin 的樣子? <- 這裡可能還要請大大糾正
- name 為你要拉的分支名稱
release
列出所有的 release branch
$ git flow release
開啟新的 release branch
$ git flow release start <release>
- release 為你想要的 release 分支名稱
結束 release branch
$ git flow release finish <release>
- release 為你想要結束的分支名稱
- release 分支完成後會被 merge進 develop 分支 和 master 分支
hotfix
列出所有的 hotfix branch
$ git flow hotfix
開啟新的 hotfix branch
$ git flow hotfix start <release>
- release 為你想要的 hotfix 分支名稱
結束 hotfix branch
$ git flow hotfix finish <release>
- hotfix 為你想要結束的分支名稱
- release 分支完成後會被 merge進 develop 分支 和 master 分支
結論
介紹了那麼多,最後的結論是我們沒有使用Git flow 😂 😂 😂,由於公司專案deploy的很頻繁,基本上master 和 develop 分支是沒有差別的,再者就算使用Git flow 也無法解決 feature 分支很久才回production 的問題,因此還是繼續使用原本的Github flow來當作我們的 workflow,不過剛好趁這個機會我也對Git flow 有進一步的認識。