2014年3月29日 星期六

Git (九) a successful git branching model

在使用git的時候由於開branch非常方便,大部分的人都會非常隨性的開branch,並沒有一定的方式,網路上有人整理出一套流程叫做a successful git branching model,個人也覺得非常不錯所以就在這邊做介紹

首先先介紹一般的開發流程通常會有兩個主要的branch , develop 和 master,

develop:平常開發的branch,任何的功能或bug fix都在該branch上開發。

master:永遠處在production ready,master上的每個點都是一個版本,always可release,是master branch的特色,這麼做的好處是,假設是自動化的開發,通常會有一個server在build並且test,這個server就可以在master上面不斷的build and test。
除了上述提到的兩個主要的branch之外,還有三個支援型的branch,分別是feature branch, release branch, 以及hotfix branch, 

feature branch:開發新功能,從develop分支出來,完成後merge回develop 
release branch:準備release的版本,只修bug,從develop分支出來,完成後merge回 master and develop
hotfix:等不及release必須馬上修趕上線的情況,會從master分支出來,完成後merge回master 和 develop

用開發的流程來說明的話就是.....

假設我們在開發一支app,然後希望下個版本會有登入/登出的功能,撥放影片功能以及產品介紹頁面,

這時候開發人員就會從develop開始開發,然後分別創建三個feature branch
feature/login、feature/playvideo、feature/productIntro
三個branch,當這些功能差不多開發完成時,就會將這些feature branch merge回develop branch
接著就會準備進測試階段,接著就會將develop branch 切換到 release branch,

在release branch上就只會修bug,不再增加新的功能,當bug修正到一定的程度已經可以release出去了就會切到master branch並且加上tag 1.0,如果沒有意外一個周期的開發流程就已經結束,

但是如果在切到master branch之後,又發現了緊急的bug (例如app crash)這時候並不會直接在master上面做修正,而是切到hotfix這個branch,並且在這個branch將bug fix 並且驗證完成後再merge回master  



在使用這套理論的時候我有個習慣,所有的feature branch在merge回develop之前都是使用 rebase
這可以讓我們git的線型看起來比較乾淨,有興趣了解rebase的人可以去Git 常用指令 (二) Rebase vs Merge看看,在這裡要再一次強調千萬不要rebase已經在push到server端的branch,由於rebase是會改變歷史紀錄的,這會造成其他已經pull該branch的人遇到一些問題。

還有一個值得注意的地方是,當使用rebase將自己的feature測試完並且確認沒有問題之後,想要將feature merge回develop時,記得要使用 merge --no-ff (no fast-ward的意思)
這會讓我們merge回develop時會出現合併的節點而不是單純的一條線



有興趣的人可以去看看我最近做的ppt,如果有疑問也歡迎大家一起討論。

最後附上ppt的網址 http://www.slideshare.net/ssuser324e5a/git-32879866

沒有留言:

張貼留言