分支 (版本控制)

版本控制軟體組態管理中,分支(英語:Branching)是由某個版本的程式碼或軟體物件中建立複製版本,在分支出來後的兩個版本,可以獨立進行修改。

分支會形成樹狀結構,也被稱為treesstreamscodelines。原始的版本,稱為父分支(parent branch)或是上游分支(upstream branch)。分支出來的複本,稱為子分支(Child branches)。作為最源頭,沒有父分支的分支,稱為主幹(trunk)或主線(mainline)[1]

分散式版本控制系統(例如Darcs英語Darcs)中,分支和存放版本的儲存庫(repository)是一樣的。在這類系統,複製一份儲存庫的複本和分支是一樣的。

軟體進行分支後,之後有可能會再將分支合併回父分支。常見的是將修改內容合併回主幹(有可能主幹不是父分支)。若某個分支不打算合併(例如曾由第三方授權,授權內容不相容,因此已重新授權英語relicensing,或是用在不同用途上),會稱為分叉(fork)。

使用分支的原因

編輯

建立分支可以讓各部份的程式碼可以平行開發[2]。大型專案會有不同的參與者,例如開發人員、build管理者,以及軟體品質保證人員等。甚至需要維護針對不同作業系統的不同發行版。分支可以讓參與者在不破壞基礎代碼穩定性的情形下,將修改和基礎代碼隔離,再進行程式錯誤修正、新機能英語Feature (software design)開發[3]軟體版本整合等。這些修改可以在測試完成後,再合併回主線。

開發分支

編輯

開發分支(development branch)或開發樹(development tree)的程式碼是指正在軟體開發,但還沒有正式發行的程式碼。若在開放原始碼社群中,「正式發行」不是那麼直覺,因為任何人隨時都可以取出(check out)需要的版本,不管是不是在開發分支中都可以取出。一般而言,最終會是下一個主要版本的分支就是開發分支。不過也常常同時開發多個機能,因此存在多個開發分支。

有些版本控制軟體會針對主要的開發分支有特殊的命名,例如在CVS中稱為MAIN,在git中則稱為master[4]

陰影分支或魔術分支

編輯

cvc英語cvc system(開源軟體,整合rPath開發的版本控制系統)及CVSNT英語CVSNT中,可以針對上游的分支建立陰影分支或魔術分支,在小修改的維護上比較方便。

儲存庫的複製

編輯

分散式版本控制中,可以複製整個儲存庫(以及其中的分支),之後再進行開發。Monotone(mtn)、Mercurial(hg)[5]git[6]稱為clone。

相關條目

編輯

參考資料

編輯
  1. ^ Berczuk, Steve; Appleton, Brad. Software Configuration Management Patterns: Effective Teamwork, Practical Integration. Addison-Wesley. 2003 [2007-05-24]. ISBN 0-20174117-2. (原始內容存檔於2020-10-30). 
  2. ^ Appleton, Brad; Berczuk, Stephen; Cabrera, Ralph; Orenstein, Robert. Streamed Lines: Branching Patterns for Parallel Software Development (- PDF). Hillside. 1998-02-08 [2009-08-12]. (原始內容存檔 (PDF)於2020-10-25). 
  3. ^ Bailey, Derick. Part 1: Why. Branch-Per-Feature Source Control. Los techies. 2009-07-15 [2009-08-12]. (原始內容存檔於2020-07-29). 
  4. ^ Git Branching Branches in a Nutshell. [2020-07-29]. (原始內容存檔於2020-12-20). 
  5. ^ clone. [2020-07-29]. (原始內容存檔於2018-07-01). 
  6. ^ git-clone. [2020-07-29]. (原始內容存檔於2020-12-14).