分岐戦略がn個の機能ブランチ、「マスター」(メインライン)および「統合」ブランチで構成されている場合。統合ブランチの目的は何ですか?機能ブランチ自体でテストと統合を実行できないのはなぜですか?
3 に答える
機能ブランチだからです。1つの機能に関連する変更のみを含める必要があります。統合ブランチでは、マスターに最後にプッシュする前に、テストのために複数の機能をまとめます。
もちろん、このように物事を分離する必要はありません。マスターですべての作業を実行できるのと同じように、機能ブランチで統合を実行できます。しかし、関心の分離は良いことです。
正確に「分離が良い」理由をもう少し具体的に説明すると、統合ブランチの目的は、新機能が単独で機能するだけでなく、他の新機能と組み合わせて機能するかどうかを判断することです。これは、そうでない可能性があることを意味します。機能により、解決に時間がかかる競合が発生する可能性があります。
ただし、新しい機能のサブセットをメインラインブランチに展開し始めたい場合もあります。そのため、2つの機能に互換性がないため、すべての機能をブロックしないでください。
さて、すでに機能ブランチを互いにマージしている場合、それらを別々にメインラインにマージするのは難しいでしょう。それは完全に不可能ではありませんが、それは確かに面倒です(私は試しました)。
機能ブランチに主要なコードチャーンが含まれている場合、または作業中のコードの領域に関してそれらが大幅に重複している場合は、このアイデアをさらに進めて、他の場所にマージする前に2つの機能を統合するブランチを作成することもできます。グローバル統合ブランチを含みます。つまり、複数のレベルの統合があります。もちろん、これは一般的に望ましい状況ではありませんが、回避できない場合があります。統合ブランチに寛大な場合は、結果として生じる競合をはるかに簡単に解決できます。
「統合」ブランチの必要性について私がよく目にする主な理由の1つは、機能ブランチ自体がテストできない場合です。私の経験では、これは通常、データベースの依存関係が原因です。または、データベースでバックアップされたWebサイトプロジェクトについて考えてみます。たとえば、BEAWeblogicでホストされているJSPアプリケーションを60GBのOracleデータベースでバックアップします。各機能ブランチにテスト対象の独自のBEAWeblogicおよびOracleインスタンスを提供するには、多くのハードウェアが必要になります。代わりに、一般的に、機能ブランチに可能な限り最適に開発する方が簡単ですが、完全なQAテストのために統合ブランチに移動します。QAは完全なWebサーバーとデータベースで実行する必要があります。