Webアプリケーションの開発/メンテナンス中にどの分岐戦略を使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/4509658

質問

私は、Webアプリケーションプロジェクトの最良の分岐戦略を決定しようとしています。これが私が今まで思いついたものです。コメントや経験に感謝します。

私が見る方法は、2つの主要な分岐戦略があります。「Branch by Release」と「Branch by Feature」です。

「リリースによる支店」: :開発はトランクで行われます。リリースの時間が近づくと、そのリリース用のブランチが作成されます。その後、このブランチは安定/テストされ、最後にリリースが行われます。リリース後、バグ固定のためにリリースブランチを生かし続けながら、ブランチはトランクに統合されます。バグフィックスが適用され、トランクにマージされます(トランクの開発が他の手段でバグを覆っていない場合)。新機能がトランクに追加され、リリースブランチには影響しません。新しいリリース時間が近づくと、新しいリリースブランチが作成されますaso

「機能によるブランチ」: :トランクは常に「生産」トランク(ライブのコード)です。バグフィックスはトランクに直接コミットされます。次のリリースの機能は、機能ブランチで開発されています。Bugfixesは、時々機能ブランチにマージされます。リリース時間が発生すると、機能ブランチがトランクに統合され、生命のサイクルが続きます。

今、私が見ている方法は、これら2つの戦略の大きな実用的な違いは、「リリースごと」を使用すると、ソフトウェアのさまざまな生産バージョンを維持できることです(クライアントAにバージョン1とクライアントBバージョン1.5がある場合、クライアントはこれで有料顧客です場合)。対照的に、「by feature」戦略を使用すると、現在の生産バージョンのみをサポートできます(すべてのクライアントは最新バージョンを使用しています)。

典型的なので ウェブアプリケーション すべてのクライアントは同じ「最新」バージョンを使用しています(すべて同じサーバーにアクセスするため)、「機能ごと」アプローチが最も一般的に使用されると仮定します。 「階層全体に」マージする必要性を削除します。たとえば、バグフィックスを3つのリリースバージョンすべてに適用する必要がある場合です。

したがって、私の現在のステータスは、「機能ごとにブランチ」を使用する必要があるということです。それが重要な場合、私のチームはあまり熟練していません。

役に立ちましたか?

解決

いつでもリリースが1つしかない場合、1つのリリースが1つだけで、すべての開発を単一の機能ブランチで行うと、これらのアプローチは効果的に同じです。

あなたへの枝バイの特徴が、一度にいくつかの枝を持っていることを意味する場合、私はそれがペストのようにそれを避けるでしょう。枝が多いということは、より多くのマージを意味します。これはそれ自体が痛みであり、より統合されています。単一のコードラインへの継続的な統合を行う方がはるかに優れています。

展開プロセスがブランチ、テスト、ライブを使用するよりも複雑な場合、ブランチバイリリースの利点は、複数のリリースブランチを一度に、異なる段階で実行できることです。もう1つは安定し、テストされ、受け入れを経て、トランクの開発が継続されます。一方、ライブトランクを持っている場合は、ライブを使用することを目的として機能ブランチをマージすると、現在のライブシステムにバグ修正を行う能力を失います。機能ブランチマージは、返還なしのポイントになります。

他のヒント

どんなソフトウェアを開発していますか?収縮包装?オープンソースプロジェクト?その場合は、「リリースごとにブランチ」または「不安定なトランク」アプローチを使用してください。特に、リリースサイクルが6か月から1年ごとに離れている場合。

ただし、数週間に1回以下のように、より短い周波数で変更されるWebベースのプロジェクトを維持する場合は、「Branch by Feature」または「Stable Trunk」アプローチを使用してください。このアプローチの問題は、スイープの変更がある複数の機能の変更を統合することで、マージプロセスが楽しいよりも少なくなります。それは本当に難しくなります。

しかし、それらは両方ともうまく機能しますが、両方が必要な場合はどうでしょうか?つまり、数週間に1回大きな機能の変更を伴うプロジェクトがありますが、機能の変更が準備が整うのを待つことができないバグ修正が多数あることがわかります。トランクは、「branch by feature」アプローチを備えたリリースブランチです。リリースの両方を取得して自分のブランチを備えたらどうでしょうか?

これをチェックしてください ブログの記事 CollabnetのBob Archerによって。彼のアジャイルリリース戦略はあなたに両方のベストを与えます。私はこれを使用しました。それは非常に柔軟です。ボブは彼の図にそれを見せていませんが、複数のリリースブランチを同時に使用することができます。これは、生産へのロールアウトの準備ができているリリースブランチと、最終的なQAチェックのために準備されている別のリリースブランチを持つことができることを意味します。しかし、考慮すべき2つのこと:

まず、開発者は合併してどれくらい良いですか?たとえそれが小さなチームであっても、アジャイルリリース戦略アプローチを自分で行うことはできません。誰もが自分の役割を果たさなければならず、彼らは本当にマージと彼らが使用しているツールをマージするために使用していることを理解する必要があります。

第二に、準備が整った変更とそれがやろうとしている変化を十分に把握する必要があります。リリース管理は、この作品を時計のように機能させるための鍵です。準備が整ったら各機能は、リリースブランチに割り当てられ、マージする必要があります。

どんなアプローチを選択しても、開発中のものと、その開発のためにリリースしている変更の頻度に帰着します。

あなたをさらに混乱させるリスクがある:あなたはリリースブランチを持つことができます 機能ブランチですべての変更を加えます。これらのことは相互に排他的ではありません。

そうは言っても、並列リリースファミリは必要ないように聞こえますが、頻繁に展開したいのですが、おそらく 継続的に. 。したがって、いつでもリリースできる「安定したトランク」が必要です。フィーチャーブランチは、変更が行われ、自分自身が証明されたときにのみトランクに合併するため、トランクを安定させるのに役立ちます。

ですから、あなたの選択は良いフィットだと思います。

これらの選択は相互に排他的ではありません - 両方を使用してください。 彼らはさまざまな問題を解決します:

「リリースによる支店」 - リリースブランチは、次のバージョンが開発中に現在のライブバージョン(または以前にリリースされたバージョン)を作成するために使用されるソースに戻ることができるように使用されます。これは、現在の開発トランクのバグ修正またはバックパッチ機能のリリースバージョンを変更するためです。

「機能によるブランチ」 - 安定した開発トランクを常に保持するために使用されます。これは、複数の開発者や実験的な「多分」機能に特に役立ちます。

私は両方を使用しますが、それが解決する問題があなたに適用されない場合、またはあなたがその問題の別の解決策がある場合、あなたはアプローチの1つを捨てることができます。

GitやMercurialなどの最新のDVCを使用することを強くお勧めします。それらは並列開発で準備されているため、変更を古いシステムとは異なる方法で保存するため、多くのsanerが融合します。

私は自分のプロジェクトにGitを使用する傾向がありますが、私が従う傾向があるプロセスはこのようになります(そして、Subversionのためにも機能するはずです):

  • 新しい機能ごとに、その機能のブランチを作成します。
  • すべてが機能したら、それをにマージします staging ブランチ、そしてそれをステージングサーバーに展開します(あなたはそれらのいずれかを持っていますか?)
  • クライアントがステージング中のものに満足していると確信したら、ステージングブランチを本番ブランチに統合し、そのようなものとしてタグ付けします production_release_22 また production_release_new_feature_x, 、その後、そのタグを生産サーバーに展開します。

タグはです 一度もない, これまで 更新 - 何かが展開されると、より多くの変更が構築され、テストされ、タグ付けされるまでそのままになります - そして、新しいタグが展開されます。それがあることを確認することによって タグ 展開されないようになります , 、私は(または他の人)が「この1つのクイック変更をコミットし、テストせずにサーバーを更新するだけです」などのことをしないようにします。

これまでのところ私にとってはかなりうまくいきました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top