バージョン管理およびソフトウェア構成管理におけるブランチングとは、バージョン管理下のオブジェクト(ソースコードファイルやディレクトリツリーなど)を複製することです。複製されたオブジェクトはそれぞれ個別に並行して変更できるため、異なるオブジェクトになります。この文脈では、これらのオブジェクトはブランチと呼ばれます。バージョン管理システムのユーザーは、任意のブランチをブランチ化できます。
ブランチは、ツリー、ストリーム、またはコードラインとも呼ばれます。元のブランチは、親ブランチ、上流ブランチ(または、特にブランチが異なる組織や個人によって管理されている場合は単に上流)、またはバッキングストリームと呼ばれることがあります。
子ブランチは親ブランチを持つブランチです。親ブランチを持たないブランチは、トランクまたはメインラインと呼ばれます。[ 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のような分散型リビジョン管理システムの中には、リポジトリとブランチの区別がないものがあります。これらのシステムでは、リポジトリのコピーを取得することはブランチを作成することと同等です。