ブランチ (ソフトウェア)

バージョン管理システムおよびソフトウェア構成管理におけるブランチ(branch)とは、バージョン管理システムの管理下にあるオブジェクト（ソースコードファイル、ディレクトリツリーなど）を複製し、それぞれ同時並行して変更が行えるようにしたものである。

ブランチはツリー(tree)、ストリーム(stream)、コードライン(codeline)などとも呼ばれる。分岐元のブランチは親ブランチ(parent branch)、アップストリームブランチ(upstream branch)（特に、分岐元のブランチが他の組織や個人により管理されている場合には単純にアップストリーム(upstream)とも）、バッキングストリーム(backing stream)などと呼ばれる。親を持つブランチは子ブランチ、親のない（起点となる）ブランチはトランク(trunk)またはメインライン(mainline)などと呼ばれる。

分散型バージョン管理システムの中にはのように、リポジトリとブランチを区別できないものもある。このようなシステムでは、リポジトリのコピーの取得はブランチの作成と変わらない。

ブランチを作成する場合、通常は変更点を後で親ブランチに対してマージまたは統合できる必要がある。トランクを直接の親としないブランチから、トランクへの変更点をマージするといったことも行われる。マージ予定のないブランチの作成は、一般的にフォークと呼ばれる。

ブランチ作成の動機 
ブランチを作成することで、ソフトウェアの各パーツを並行して開発できる。
また、大規模なプロジェクトでは、開発者、マネージャ、品質保証担当者など、様々な役割の担当者が必要となる。さらに、さまざまなオペレーティングシステム向けに複数のリリースを管理する必要もあるだろう。このような場合にブランチを作成すれば、各担当者はコードベースを不安定にするリスクを負わずに、例えばバグに対するパッチ当て、新しい機能の追加
、バージョン間の統合といった変更を独立に行うことができる。これらの変更は、後でテストを行った後に再同期される。

開発ブランチ 
正式リリースされる前の、まだ開発中のバージョンのソフトウェアは開発ブランチ (development branch) または開発ツリー (development tree) と呼ばれる。もっとも、オープンソースコミュニティにおいては誰もが好きなバージョンのソフトウェアを（開発ブランチかそうでないかに関係なく）取得できるため、「リリース」という概念は比喩的なものと言える。また、最終的に次のメジャーバージョンになるブランチを特に指して「開発ブランチ」と呼ぶこともある。一方で、後続バージョンが複数あり、それが同時に開発中の状態にあるということもよくある。

バージョン管理システムによっては、主となる開発ブランチを指すのに特別の用語を使う場合もある。例えばCVSではメイン (MAIN)、より一般的にはメインライン(mainline)と呼ばれる。

シャドウブランチとマジックブランチ 
cvcやといったシステムにはシャドウブランチ(shadow branch)またはマジックブランチ(magic branch)という機能がある。これはアップストリームブランチで行われた変更を「覆う」ことで、小さな変更点の管理を容易にする仕組みである（cvcはrPathの開発したオープンソースのパッケージビルドシステムで、バージョン管理システムの機能が盛り込まれている）。

関連項目 
 トランク (ソフトウェア)
 リビジョンタグ

参考文献

外部リンク 
 Streamed Lines: Branching Patterns for Parallel Software Development

バージョン管理