1. 程式人生 > >Git程式碼分支管理在專案中的實踐

Git程式碼分支管理在專案中的實踐

Git是一個非常強大的分散式版本管理工具,分散式簡單的理解就是在本地也會copy一份程式碼資料,使用者機器可以當作一臺本地伺服器,用於程式碼的離線的提交,即你坐在青海湖邊在沒網路的情況下也可以提交自己的程式碼,想想就流逼,但是真正提交到中央倉庫還是需要網路才行,不過這個功能已經可以讓大家不受中央叢集的服務狀態影響,即使掛掉了自己還可以進行程式碼提交,等伺服器正常後再次提交即可,本文不講述git與svn的區別,如果想大概瞭解的話可以檢視《git與svn的區別》,下面主要講述git分支管理在專案中的實際使用。

主要分為以下四大分支:

  • master
  • dev
  • test
  • bugfix(可不用)

一、master(主分支)

當代碼克隆下來後預設就是這個分支,也就是所謂的主分支,可以認為該分支是儲存當前功能測試通過且可執行的正式程式碼,所以一般不會直接在主分支上進行開發,這個是核心分支,也就是主路徑,所有最後的程式碼都必須合併到主路徑上,如果釋出到生產環境必須通過master分支進行打包,這是程式碼管理非常重要的一步,即使線上程式碼出現問題後也可以迅速通過主分支進行程式碼修復,保證不會出錯,也保證修復的是與線上正在的執行程式碼同步的。

git clone xxxxxxxx.git

master的版本管理直接用tag功能即可,即通過打tag的方式表示當前可以上線的一個版本,也方便以後進行對應版本的資料查詢或者比較,如v1.0.0-publish,v2.0.0-publish等


二、dev(開發分支)

開發分支是研發同學最需要關心的,所有的開發工作應該圍繞dev分支進行展開,建立dev分支指令碼如下:

git checkout -b dev master

dev分支在實際工作中主要有兩種常用場景:

  1. 單個版本開發
  2. 多個版本並行開發

針對第一種情況,屬於比較常見的情況,即開發過程中都是按順序進行的,即1.0.0開發完成之後才會進行開發1.1.0的需求開發,1.1.0完成上線後再進行1.2.0的版本開發,針對這種,工作直接在dev分支上開展就可以了,不需要做特殊處理,因為不會產生任何干擾~~

相關操作指令碼:

#切換到dev分支下進行開發
git checkout dev
#同步最新的程式碼
git pull

#。。。。。
開發程式碼,各種commit,push,這裡就不列了
#。。。。。

#開發完測試通過後合併到主幹,先把本地的dev程式碼更新到最新,接著執行下面指令碼
git checkout master
git pull
git merge --no-ff dev
git push


針對第二種情況,可能在網際網路公司會比較常見,在開發資源比較充足的情況下,多個版本可能同時並行,即1.1.0和1.2.0或者更多版本在同時開發,但是又想快速試水一些功能,不可能等到全部做完都上線,所以1.1.0會先發,1.2.0會在另外一個時間點發,產品經理通常會很著急,認為錯過這個時間點就會損失十幾億的感覺,碎碎的憂傷,所以分支的合理管理非常重要,不然在開發過程中會顯得非常混亂,如果都在dev分支上進行開發就會把沒做完的功能都發線上了,這時候就更碎了~~~ git 也給我們使用feature功能模式,即功能分支,可以通過這個來劃分,如下:

先建立兩個feature分支,跟建立dev分支一樣,不過這次是從dev分支進行建立

git checkout -b feature-1.1 dev
git checkout -b feature-1.2 dev

開發1.1.0版本操作的相關指令碼:

git checkout feature-1.1

#又是各種commit push操作,開發完成測試通過後執行下面操作,合併程式碼到dev分支:
git checkout dev
git pull origin dev
git merge --no-ff feature-1.1
git push

#刪除本地feature分支
git branch -d feature-1.1
#刪除遠端feature分支
git push origin --delete feature-1.1

開發1.2.0版本操作的相關指令碼:

git checkout feature-1.2

#又是各種commit push操作,開發完成測試通過後執行下面操作,合併程式碼到dev分支:
git checkout dev
git pull origin dev
git merge --no-ff feature-1.2
git push

#刪除本地feature分支
git branch -d feature-1.2
#刪除遠端feature分支
git push origin --delete feature-1.2

分支切換流程圖如下:


三、test(測試分支)

測試分支很明顯是給測試同學使用的,主要是開發同學認為在開發分支上進行測試通過後可以合併到test分支上,提給測試同學測試,如果需要簡單一點的分支管理結構可以把test分支去除,因為加了一層之後合併的操作可能會增加,不過這塊可以保證合併到主幹的程式碼都是統一由測試同學測試通過後合併,因為dev分支一直都可以新增新程式碼,當增加新程式碼後必須要測試才可以上線,所以才會產生了test分支,建立分支的指令碼如下:

git checkout -b test master
分支合併操作跟上面的操作指令碼相似,這裡面就不一一列出了,大概的執行路徑如下圖:


四、bugfix分支(bug修復分支)【可不用】

緊急修復線上bug的時候使用,但是一般場景的話直接在master上修復即可了,因為bug一般都是要立即解決,切個分支來做還會增加成本,所以可以不用單獨切個分支出來,如果要使用的話其實也是從master上打個分支出來,修復完後直接合併到master上,分支建立指令碼如下:

git checkout -b bugfix master

具體切換流程如下:


現在在專案中主要是使用dev - test -master的模式,大家也可以使用這種方式進行分支管理,讓你的程式碼庫更加有序,上面有說的不對或者寫錯的地方,麻煩大家在評論中指出,或者有更好的管理方法也可以一起交流~~~

參考文章:

http://www.oschina.net/news/12542/git-and-svn

http://www.ruanyifeng.com/blog/2012/07/git.html

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374027586935cf69c53637d8458c9aec27dd546a6cd6000