バージョン管理およびソフトウェア構成管理におけるブランチとは、バージョン管理下のオブジェクト(ソースコードファイルやディレクトリツリーなど)を複製することです。その後、各オブジェクトは個別に、かつ並行して変更することができ、異なるオブジェクトになります。この文脈では、これらのオブジェクトはブランチと呼ばれます。バージョン管理システムのユーザーは、任意のブランチを分岐させることができます。
ブランチはツリー、ストリーム、コードラインとも呼ばれます。元のブランチは、親ブランチ、上流ブランチ(ブランチが異なる組織や個人によって管理されている場合は、単に上流)、またはバッキングストリームと呼ばれることもあります。
子ブランチは親があるブランチです。親のないブランチはトランクまたはメインラインと呼ばれます。[ 1 ]トランクは HEAD と呼ばれることもありますが、厳密にはヘッドはブランチではなく、特定のブランチにおける最新のコミットを指し、トランクと各名前付きブランチの両方に独自のヘッドがあります。トランクは通常、開発が進められるプロジェクトのベースとなるものです。開発者がトランクでのみ作業している場合 (いわゆるトランクベース開発)、トランクには常にプロジェクトの最新の最先端バージョンが含まれますが、最も不安定なバージョンである可能性もあります。別の方法として、トランクからブランチを分割し、そのブランチに変更を実装して、ブランチが安定して動作していることが証明されたら、その変更をトランクにマージする方法があります。開発モードとコミットポリシーによって、トランクには最も安定したバージョン、最も安定していないバージョン、またはその中間のバージョンが含まれることがあります。トランクの他の用語にはベースライン、メインライン、マスターなどがありますが、場合によってはこれらは類似しているが異なる意味合いで使用されます。バージョン管理の § 一般的な用語を参照してください。多くの場合、主要な開発者の作業はトランクで行われ、安定バージョンはブランチ化され、時折、ブランチからトランクにバグ修正がマージされます。将来のバージョンの開発がトランク以外のブランチで行われるのは、通常、変更頻度の低いプロジェクト、または変更がトランクに組み込む準備ができるまで長い開発期間を要すると予想される場合です。
ブランチとは、一般的に、後で変更を親ブランチにマージまたは統合できることを意味します。多くの場合、変更はトランクにマージされますが、トランクが親ブランチでなくてもマージされます。マージを意図していないブランチ(例えば、サードパーティによって互換性のないライセンスで再ライセンスされた場合や、別の目的で使用しようとしている場合など)は、通常「フォーク」と呼ばれます。
ブランチは、ソフトウェアの各部分を並行して開発することを可能にします。[ 2 ]大規模プロジェクトでは、開発者、ビルドマネージャー、品質保証担当者など、多くの役割を担う必要があります。さらに、異なるオペレーティングシステムプラットフォーム上で複数のリリースを保守する必要がある場合もあります。ブランチを使用すると、貢献者はコードベースを不安定にすることなく、バグ修正、新機能[ 3 ]、バージョンの統合などの変更を分離できます。これらの変更は、テスト後にマージ(再同期)される可能性があります。
ブランチは、ベンダーブランチングを実装するためにも使用できます。ベンダーブランチとは、外部の「上流」関係者(「ベンダー」)が公開したソースコードを使用、追跡、そして必要に応じて変更する戦略です。CVS時代からかなり一般的に行われているこのアプローチでは、ベンダー提供のコードを保持するための別のブランチが作成されます。このブランチは新しい上流リリースで更新され、必要に応じてメインのコードベースにマージされます。[ 4 ]
ソフトウェアの開発ブランチまたは開発ツリーとは、開発中であり、まだ公式にリリースされていないバージョンです。オープンソースコミュニティでは、「リリース」という概念は一般的に比喩的な意味合いを持ちます。なぜなら、開発ブランチ内にあるかどうかに関わらず、誰でも希望するバージョンをチェックアウトできるからです。多くの場合、最終的に次のメジャーバージョンとなるバージョンが開発ブランチと呼ばれます。しかし、ある時点では、ソフトウェアの後続バージョンが複数開発中であることがよくあります。
多くの場合、開発ブランチはトランクです。一部のリビジョン管理システムでは、メインの開発ブランチを表す独自の専門用語があります。例えば、CVSでは「MAIN」ブランチと呼ばれます。Gitではデフォルトで「master」が使用されますが、GitHub [ 5 ] [ 6 ]とGitLabはジョージ・フロイドの殺害を受けて「main」に切り替えました。
CVSNTでは、シャドウブランチまたはマジックブランチによってアップストリーム ブランチで行われた変更が「シャドウ」され、小さな変更の維持が容易になります (cvc は、 rPathによって生成されたパッケージのバージョン コントロール システムを組み込んだオープン ソース パッケージ構築システムです)。
分散リビジョン管理では、ブランチを含むリポジトリ全体をコピーして、さらに作業を進めることができます。Monotone ( mtn )、Mercurial (hg)、gitではこれを「クローン」と呼び、Bazaarでは「ブランチ」と呼びます。
Darcsなどの一部の分散リビジョン コントロール システムでは、リポジトリとブランチが区別されません。これらのシステムでは、リポジトリのコピーを取得することは、ブランチを作成することと同じです。