1. 程式人生 > >經典的Git進行原始碼管理的分支模型

經典的Git進行原始碼管理的分支模型

本文介紹一種使用Git進行原始碼管理的分支模型,著重於如何使用Git更好的管理我們的原始碼。

我假定您對Git有一定了解,會使用基本的Git命令進行一些簡單的原始碼管理工作。這不是一篇Git使用教程。

文章的主要思想源自以下連結:

根據自己的使用情況進行了補充。

我們知道Git是一個不需要中心伺服器就能工作的原始碼管理系統;但我仍然建議你至少保持一個邏輯上的中心伺服器來存放你的長期分支(後文我們會說到什麼是“長期分支”,什麼是“臨時分支”)。我說“邏輯上”的中心伺服器,意思是你不必搭建一個真實的伺服器——當你只是在實現一個小型應用時,可能開發人員只有你一個人,這個時候你完全可以將長期分支就放在你的專案目錄裡。

首先看一張圖:

這張圖上有這麼幾個分支:master,develop,feather,hotfix,release。它們之間存在著branch和merge的關係。我們從master和develop開始。

image

master和develop分支都是長期分支,它們存在於整個專案存續期內。

master分支是整個專案的主分支。

所有其他分支都直接或間接源自master。master分支是可直接用於產品釋出的程式碼。

develop分支反映最新的開發程序。

develop中的程式碼總是可以完整build的。當develop中的程式碼進入穩定狀態(修復了絕大多數bug)準備release時,所有develop中的更改將通過release branch最終merge到master。

除master和develop以外的分支都是臨時分支。當這些臨時分支完成其使命,就可以刪除它們。我們先看feather分支。

feather分支用於某個新feather的開發,源自develop,並最終merge到develop。

feather分支最終的結局要麼合併到develop branch,要麼被拋棄。feather分支用如下命令建立:

# git checkout –b my feather develop

完成後將這個feather合併到develop:

# git checkout develop

# git merge --no-ff myfeather

# git branch –d myfeather

# git push origin develop

合併時--no-ff選項避免fast forward。使用該選項和不使用該選項得到的分支路線圖分別如下:

image

release分支用於準備新版本的釋出。源自develop,merge到develop和master。

release分支僅修復小的bug,完成準備版本號,build date等工作。而develop分支可以同時開始新feather的開發。該分支上修復的bug需要merge到develop,並在該分支完成時merge到master。此時需要給master打上tag,標記這個新的release。

建立release branch:

# git checkout –b release-x.y develop

完成release branch

# git checkout master

# git merge --no-ff release-x.y

# git tag –a x.y

# git checkout develop

# git merge --no-ff release-x.y

# git branch –d release-1.2

Hotfix分支用於緊急bug修復,源自master,merge到develop和master。

對於已釋出的產品,可能有意外的緊急bug需要修復。hotfix branch可以避免修復bug的工作影響develop branch。

建立hotfix branch:

# git checkout -b hotfix-x.y master

完成hotfix branch:

# git checkout master

# git merge --no-ff hotfix-x.y

# git tag –a x.y.z

# git checkout develop

# git merge --no-ff hotfix-x.y

# git branch –d hotfix-x.y

這裡有個例外就是,如果hotfix發生時有正在進行的release branch,那麼將hotfix merge到release,而release最終會merge到develop和master。

到此我們的分支模型介紹就完畢了。我使用這個branch model有幾個月了,感覺是:Great!