Git-flow 讓 Dev Team 步上穩健開發之路

A successful Git branching model 點圖放大
從去年開始我認識了 Git 這套新一代版本控管,最大不同是,它採取了分散式的控管,每一個開發人員都可以當作 branch,當然會有中樞在定義 master 或者主要開發幹線,當開發完畢要彙整回主要中樞位置,幾乎採取是 merge 的指令,光談 Git 使用,它已經強化了 merge 的功能,而且因為分散式的管理,每一位開發人員都可以自己做版本控管 (commit, reset 等) 當要跟中樞控管溝通才使用 (push, pull 等) 這些種種新的功能特色,讓 open source project 在開發上可以更為的順利與方便。

既然 Git 在 branch 開設與事後 merge 這方面強化,在開發上是否有更好的開發模式,來協助我們軟體開發呢?

Git-flow 是一套成功 Branch model 開發經驗而設計出來的協助工具,當安裝好之後,在 command line 下 git-flow 即可知道它的功能樣貌。

主要分為幾個主要幹線和分支之間做交互轉換。接下來以開發一個從 0.2 進入 0.3 版本階段為例,這個開發里程碑裡面,需要完成三個主要 features:為軟體的 UI 做動線改善、UI 元素的修正、需要將物件導向的 data model 做翻修調整,套用在此 git-flow 上,作為一個使用 git-flow 生命週期介紹。

首先準備好 master 和 develop 這兩個主要線,master 是做為最穩定可以交付出去的版本路線,develop 是開發人員的開發路線,這邊是有最新功能的路線。
 
Day 1~2 將 UI 做動線改善,採用這樣指令 git-flow feature start uiNavigationArrange,於是幫在 feature 類別裡面,開設了 uiNavigationArrange 的 branch,於是任何程式開發都在這裡做 commit,如果需要同仁協助,就 push 到中樞管理位置,讓同仁可以一起開發。當完成後,下達 git-flow feature finish uiNavigationArrange。於是 git-flow 幫忙把此 local branch delete 掉,merge 回 develop 路線,再將 develop 路線 push 到最新位置,讓同仁可以做同步。

Day 3 將 UI 元素修正,採用 git-flow feature start uiElementsEdit,於是在 feature 開設了新的 branch,將畫面需要各種元素控制項做些調整之後,下達 git-flow feature finish uiElementsEdit,於是 git-flow 幫忙把 local branch 移除掉, merge 回 develop 開發路線。

Day 4 將 Data model 調整,採用 git-flow feature start refactorDataModel,於是在 feature 開設了新的 branch,將物件彼此間做些調整與擴充之後,修改完成後,下達 git-flow feature finish refactorDataModel,於是 git-flow 幫忙把 local branch 移除掉, merge 回 develop 開發路線。

Day 5 要做版本 Release,採用 git-flow release start 0.3,於是從原來 0.2 的進展到本次新版本 0.3 的路線,進入測試階段,過程如果發現想要些微調整都在此 commit,完成確定此版沒有問題,採用 git-flow release finish 0.3,這時候就是 git-flow 幫忙,它會砍掉此 release/0.3,幫忙下 tag v0.3 (如果當初開始 git-flow 有為 tag 做 prefix 'v' 命名,這邊會自動加上去),且 merge 到 master 和 develop 路線,於是範例產品 0.3 版誕生了,此版功能有改善 UI 動線、變更 UI 元素控制項、後面 data model 的修正。

如果上線發現有問題要修,就可以採用 hotfix 的方式來做些調整與修正,回饋到 develop 路線,也作為 master 的修正。

以上是一個套用在開發專案或者產品所採用的開發範例,git-flow 讓開發過程站對腳步,又能將過程做個完整紀錄,不論開發團隊人數有多少,相信套用此模式開發,能讓 Dev Team 步上穩健的開發之路。最後要感謝 ihower 的部落格文章 Git flow 開發流程 介紹,以及圖片來自 A successful Git branching model 的文章。

Comments