我相信大家對於 Git 版本控制不陌生了,Git 最大強項就是可以任意建立 branch,讓您開發程式不需要擔心原本的程式碼會被動到,造成不知道該怎麼恢復原來的狀態。為了不影響產品發展,branch 對於大型工作團隊就顯得更重要了,今天在網路上看到一篇 A successful Git branching model 文章,裡面把 branch 使用方式寫得非常清楚,底下我會透過指令來說明如何使用簡單 branch 指令,當然請大家先去 github 註冊申請帳號,如果不想申請帳號,也可以自己在 local 端去執行。
底下所引用的圖片都是經由 A successful Git branching model 文章所提供。
看到這張圖其實就說明了 branch 最重要的精神:『無限建立分支』,大家也不用害怕看不懂這張圖,底下說明 branch 分支狀況
主要分支
- master 主程式(除非重大 bug,則會分出 hotfix 分支)
- develop 開發分支(用來在另外分支出 Release, feature)
次要分支
- Hotfixes(由 master 直接分支,馬上修正 bug)
- Feature(由 develop 直接分支,開發新功能)
- Release(由 develop 直接分支,開發下一版 Release)
主要分支 ( The main branches )
當專案開始執行時,我們這時候必須將程式碼分成兩部份,一個是 master 另一個就是 develop,master 主要用來 Release 產品專用,沒事就不要去動它,假如要繼續開發新功能,或者是修正 Bug issue 就利用 develop 這分支來開發,等待開發完成,要 Release 下一版產品時就將 develop merge 到 origin/master 分支,這樣才對,避免有人把 origin/master 改爛,底下這張圖就說明了一切:
次要分支 ( Supporting branches )
次要分支這裡包含了 Hotfixes, Feature, Release,其中 Hotfixes 用來修正產品最重大 bug,所以由 origin/master 直接分支出來,修正之後在 merge 回 master 跟 develop。Feature 跟 Release 都是從 develop 分支出來,最後都 merge 回 develop branch,主分支 master 再去 merge develop,這樣就完成了。上面的例子,不一定套用在各專案,因為 branch 免錢,要多少有多少,不一定完全都要 follow 此方法。
新功能分支 ( Feature branches )
branch off from: develop Must merge back into: develop
看到上面圖說明,我想大家都很清楚,develop 分支出 Feature branch,用來開發產品新功能,等到開發完整之後,在直接 merge 回 develop,底下直接用實際例子來操作:
直接由 develop 開出分支 myfeature,並且直接切換過去
|
|
直接下 git branch 觀看目前位置
經過編輯修改並且 commit
合併分支:先切換到 develop
利用 –no-ff 合併分支(稍後說明為什麼使用 –no-ff)
刪除 myfeature 分支
將資料上傳
|
|
在說明 git merge –no-ff 之前,大家先看底下的圖。
有沒有很清楚發現差別,右邊是正常的 merge,會將原本的 commit log 合併成一條,然而如果加上 –no-ff option 的話,commit log 會紀錄您是開分支出去的,清楚紀錄您的分支操作步驟,建議大家多使用此方法,畢竟預設的 merge 看到的效果不是我想要的。
產品分支 (Release branches)
May branch off from: develop Must merge back into: develop and master
Release branch
跟 Feature branch
不同點就是: 前者需要 merge 回 master,後者不需要,所以操作步驟會多一點,但是觀念不變啦。底下實際看個例子,操作一次,大家就可以熟悉了。
從 develop 開新分支 release-1.3
|
|
經過一堆 commit message
|
|
切回去主分支 master
|
|
master 合併 release-1.3 分支
|
|
在 master 上面加上新 tag
|
|
切換到 develop 分支
|
|
一樣是 merge release-1.3
|
|
上傳資料
|
|
將新 Tag v1.3 更新到 origin/master
|
|
刪除 release-1.3 分支
重大 issue 分支 ( Hotfix branches )
May branch off from: master, Must merge back into: develop and master
Branch naming 命名方式: hotfix-*
當我們產品線發現 critical bug 時,這就要從 master 拉出 hotfix-* 分支,儘快將 bug 解決,並且同時 merge 到 develop 跟 master,底下實際例子操作:
從 master 開新分支 hotfix-1.3.1
|
|
修改檔案,並且 commit
|
|
切換到 master
|
|
merge hotfix-1.3.1 分支
|
|
加上修正過後的 Tag
|
|
切換到 develop 分支
|
|
一樣是 merge hotfix-1.3.1 分支
|
|
合併過後就刪除 hotfix-1.3.1 分支
|
|
上傳資料
|
|
將 Tag v1.3.1 上傳
|
|
可以直接看看我的例子 https://github.com/appleboy/test/network 畫出來的 network 圖就是長那樣…
看完上面例子,是否清楚瞭解 branch 的基本用法,其實不會很難,看圖說故事而已,git Tag 的用法可以參考之前寫的一篇:『git-版本控制-如何使用標籤tag』。如果有任何問題,都可以在此留言。