讀古今文學網 > Maven實戰 > 13.3 主幹、標籤與分支 >

13.3 主幹、標籤與分支

使用版本控制工具時我們都會遇到主幹(trunk)、標籤(tag)和branch(分支)的概念。13.1節已經涉及了主幹與標籤。這裡再詳細將這幾個概念闡述一下,因為理解它們是理解Maven版本管理的基礎。

·主幹:項目開發代碼的主體,是從項目開始直到當前都處於活動的狀態。從這裡可以獲得項目最新的源代碼以及幾乎所有的變更歷史。

·分支:從主幹的某個點分離出來的代碼拷貝,通常可以在不影響主幹的前提下在這裡進行重大Bug的修復,或者做一些實驗性質的開發。如果分支達到了預期的目的,通常發生在這裡的變更會被合併(merge)到主幹中。

·標籤:用來標識主幹或者分支的某個點的狀態,以代表項目的某個穩定狀態,這通常就是版本發佈時的狀態。

本書採用Subversion作為版本控制系統,如果對上述概念不清晰,請參考開放的《Subversion與版本控制》(http://svnbook.red-bean.com/)一書。

使用Maven管理項目版本的時候,也涉及了很多的版本控制系統操作。下面就以一個實際的例子來介紹這些操作是如何執行的。

圖13-2下方最長的箭頭表示項目的主幹,項目最初的版本是1.0.0-SNAPSHOT,經過一段時間的開發後,1.0.0版本發佈,這個時候就需要打一個標籤,圖中用一個長條表示。然後項目進入1.1.0-SNAPSHOT狀態,大量的開發工作都完成在主幹中,添加了一些新特性並修復了很多Bug之後,項目1.1.0發佈,同樣,這時候需要打另一個標籤。發佈過後,項目進入1.2.0-SNAPSHOT階段,可這個時候用戶報告1.1.0版本有一個重大的Bug,需要盡快修復,我們不能在主幹中修Bug,因為主幹有太多的變化,無法在短時間內測試完畢並發佈,我們也不能停止1.2.0-SNAPSHOT的開發,因此這時候可以基於1.1.0創建一個1.1.1-SNAPSHOT的分支,在這裡進行Bug修復,然後為用戶發佈一個1.1.1增量版本,同時打上標籤。當然,還不能忘了把Bug修復涉及的變更合併到1.2.0-SNAPSHOT的主幹中。主幹在開發一段時間之後,發佈1.2.0版本,然後進入到新版本1.3.0-SNAPSHOT的開發過程中。

圖13-2 主幹、標籤和分支與項目版本的關係

圖13-2展示的是一個典型的項目版本變化過程,這裡涉及了快照版與發佈版之間的切換、Maven版本號約定的應用,以及版本控制系統主幹、標籤和分支的使用。這其實也是一個不成文的行業標準,理解這個過程之後,不僅能夠更方便地學習開源項目,也能對項目的版本管理更加標準和清晰。