Git 是目前最流行的源代碼管理工具,Git分支管理可以很靈活,但目前主流的分支官方方式主要有3種,本文對幾種主流的 Git 分支管理實踐進(jìn)行了介紹,可以幫助開發(fā)團(tuán)隊選擇自己最合適的方案。
1,單主干
單主干的分支實踐(Trunk-based development,TBD)在 SVN 中比較流行。Google 和 Facebook 都使用這種方式。trunk 是 SVN 中主干分支的名稱,對應(yīng)到 Git 中則是 master 分支。TBD 的特點是所有團(tuán)隊成員都在單個主干分支上進(jìn)行開發(fā)。當(dāng)需要發(fā)布時,先考慮使用標(biāo)簽(tag),即 tag 某個 commit 來作為發(fā)布的版本。如果僅靠 tag 不能滿足要求,則從主干分支創(chuàng)建發(fā)布分支。bug 修復(fù)在主干分支中進(jìn)行,再 cherry-pick 到發(fā)布分支。
2,Github flow
GitHub flow 是 GitHub 所使用的一種簡單的流程。該流程只使用兩類分支,并依托于 GitHub 的 pull request 功能。在 GitHub flow 中,master 分支中包含穩(wěn)定的代碼。該分支已經(jīng)或即將被部署到生產(chǎn)環(huán)境。master 分支的作用是提供一個穩(wěn)定可靠的代碼基礎(chǔ)。任何開發(fā)人員都不允許把未測試或未審查的代碼直接提交到 master 分支。
對代碼的任何修改,包括 bug 修復(fù)、hotfix、新功能開發(fā)等都在單獨的分支中進(jìn)行。不管是一行代碼的小改動,還是需要幾個星期開發(fā)的新功能,都采用同樣的方式來管理。當(dāng)需要進(jìn)行修改時,從 master 分支創(chuàng)建一個新的分支。新分支的名稱應(yīng)該簡單清晰地描述該分支的作用。所有相關(guān)的代碼修改都在新分支中進(jìn)行。開發(fā)人員可以自由地提交代碼和 push 到遠(yuǎn)程倉庫。
當(dāng)新分支中的代碼全部完成之后,通過 GitHub 提交一個新的 pull request。團(tuán)隊中的其他人員會對代碼進(jìn)行審查,提出相關(guān)的修改意見。由持續(xù)集成服務(wù)器(如 Jenkins)對新分支進(jìn)行自動化測試。當(dāng)代碼通過自動化測試和代碼審查之后,該分支的代碼被合并到 master 分支。再從 master 分支部署到生產(chǎn)環(huán)境
3, Git Flow
3.1,Git Flow簡介
Git Flow是構(gòu)建在Git之上的一個組織軟件開發(fā)活動的模型,是在Git之上構(gòu)建的一項軟件開發(fā)最佳實踐。Git Flow是一套使用Git進(jìn)行源代碼管理時的一套行為規(guī)范和簡化部分Git操作的工具。
2010年5月,在一篇名為《一種成功的Git分支模型的博文中》,@nvie介紹了一種在Git之上的軟件開發(fā)模型。通過利用Git創(chuàng)建和管理分支的能力,為每個分支設(shè)定具有特定的含義名稱,并將軟件生命周期中的各類活動歸并到不同的分支上。實現(xiàn)了軟件開發(fā)過程不同操作的相互隔離。這種軟件開發(fā)的活動模型被nwie稱為“Git Flow”。
一般而言,軟件開發(fā)模型有常見的瀑布模型、迭代開發(fā)模型、以及最近出現(xiàn)的敏捷開發(fā)模型等不同的模型。每種模型有各自應(yīng)用場景。Git Flow重點解決的是由于源代碼在開發(fā)過程中的各種沖突導(dǎo)致開發(fā)活動混亂的問題。因此,Git Flow可以很好的于各種現(xiàn)有開發(fā)模型相結(jié)合使用。
在開始研究Git Flow的具體內(nèi)容前,下面這張圖可以看到模型的全貌:
3.2,Git Flow 流程
Git Flow 流程中包含 5 類分支,分別是 master、develop、新功能分支(feature)、發(fā)布分支(release)和 hotfix。這些分支的作用和生命周期各不相同。
- master 分支中包含的是可以部署到生產(chǎn)環(huán)境中的代碼,這一點和 GitHub flow 是相同的。
- develop 分支中包含的是下個版本需要發(fā)布的內(nèi)容。從某種意義上來說,develop 是一個進(jìn)行代碼集成的分支。
- 從 develop 分支創(chuàng)建一個新的 feature 分支,如 feature/my-awesome-feature。
- 在該 feature 分支上進(jìn)行開發(fā),提交代碼,push 到遠(yuǎn)端倉庫。
- 當(dāng)代碼完成之后,合并到 develop 分支并刪除當(dāng)前 feature 分支。
- 當(dāng) develop 分支集成了足夠的新功能和 bug 修復(fù)代碼之后,從 develop 分支創(chuàng)建一個新的 release 分支,如 release/1.4。
- 把 release 分支部署到持續(xù)集成服務(wù)器上進(jìn)行測試。測試包括自動化集成測試和手動的用戶接受測試。對于測試中發(fā)現(xiàn)的問題,直接在 release 分支上提交修改。完成修改之后再次部署和測試。
- 當(dāng) release 分支中的代碼通過測試之后,把 release 分支合并到 develop 和 master 分支,并在 master 分支上添加相應(yīng)的 tag。
3.3,Git Flow工具
Git Flow命令行工具可以使用腳本快速創(chuàng)建、合并各類分支。
sourcetree也內(nèi)置支持Git Flow。
Git Flow更詳細(xì)介紹:企業(yè)級開發(fā):Gitflow Workflow工作流