3

内部Webアプリケーションのcodeplexの分岐ガイドで概説されている基本的な分岐計画でTFS2010を使用しています。Dev、Main(QA / Testing)、Release(Production)の3つの基本的なブランチがあります。

アプリは内部Webアプリケーションであるため、単一の製品リリースのみをサポートします。

基本的にローカルで開発し、タスク(バグ修正または拡張)を完了したら、それをDevにコミットします。また、他の開発者がチェックインしたものをすべてプルダウンする作業を開始するときは、通常、毎日Devから最新情報を取得します。一定期間(通常は1〜2週間)後、QAサイトの更新を正当化するのに十分な変更があり、すべてを開発からメインにマージしてから、マージされたメインブランチをテストのためにQAサーバーにデプロイすることを決定します。

次に、QAはサイトのテストを開始し、満足したら、メインからリリースまですべてマージを実行し、マージされたリリースブランチを本番サーバーにデプロイします。リリースまでのすべてを実際にマージする前に、複数のDevからMainへのマージを実行することさえあります。

とにかく、私たちはこの戦略を2か月間使用してきましたが、最近まですべてが素晴らしく見えました。本番環境で重大な問題が発生した場合は、リリースを修正プログラムで修正し、それを逆方向にマージすることができました。すべてがよさそうだった。

それから私達は私達が対処する方法を知らなかった何かに出くわしました。MainからReleaseまでの1つのコード修正のみをマージするという指示が与えられました(Mainの他のすべてをマージすることはありません)。これが来るとは知らなかったので、元のチェンジセットがDevからMainにマージされたときに、他のいくつかのチェンジセットと一緒にマージされました。そのため、メインからリリースにマージする場合、マージされたチャンセット全体を選択するしかありませんでした。マージされたチェンジセットに「ドリルダウン」して、本当に必要なDevからの元のチェンジセットを1つだけ選択することはできませんでした。

リリースの修正プログラムのように、変更を手動で適用して、そこに適用することにしました。しかし今、私はあなたがこのような状況をどのように防ぐかを理解しようとしています。

マージ戦略に関するいくつかの記事を読みましたが、マージするときにチェンジセットを厳選するのではなく、利用可能なすべてのものを単純にマージすることをお勧めしているようです...これは理にかなっています...しかし、常に複数のチェンジセットをマージする場合(そしてそれらが1つになる場合)宛先ブランチのチェンジセット)では、必要に応じて、元のチェンジセットの1つだけを本番環境にマージするにはどうすればよいでしょうか。

たとえば、Dev(C1、C2、C3)をMain(C4になる)にマージする場合、C4内のC1のみをリリースまでマージするにはどうすればよいですか?

一度に複数のチェンジセットを行うのではなく、すべてのチェンジセットをDevからMainに個別にマージする方がよいと思います。少なくとも、必要に応じて、メインからリリースに簡単に移行できます。

推奨事項/ライフレッスンなど。この特定のシナリオの分岐/マージの処理についていただければ幸いです。

4

2 に答える 2

1

あなたのシナリオでは、次のことを行うことができました。

  • メインのロールバックC4 (ロールバックは逆の変更を適用する変更セット自体であるため、C5 になります)
  • Dev から Main に再度マージしますが、今回は C1 のみを選択します (Main では C6 になります)。
  • 変更セット C5 と C6 を再度ロールバックすると、以前と同様にすべての変更が Main に反映されます。(Main では C7 になります)。

この後、メインに以前と同じコード ベースがあり、C6 (C1 からの変更のみを含む) をメインからリリースにマージできるようになりました。

ただし、将来このような問題を回避するには、dev から main へのすべての変更セットを個別にマージすることを検討する必要があります。

于 2012-09-26T08:32:19.513 に答える
1

すべての変更セットを dev から main にマージすることはお勧めしません。それは悪い考えであり、多くの追加のリスクがあります!

しかし、常に複数の変更セットをマージする場合 (そしてそれらは宛先ブランチで 1 つの変更セットになる)、必要が生じた場合に元の変更セットの 1 つだけを本番環境にマージするにはどうすればよいでしょうか?

必要が生じるのを許してはいけませんし、そうすべきではありません。

これはおそらくあなたが探している簡単な答えではありませんが、実際には簡単な答えはありません。すべての単一の変更セットをマージすることは、とにかく起こってはならない何かに備えるために膨大な量の労力を生み出しています. 実際、個々の変更セットをマージするプロセスは、さらに複雑になり、最終的には、ソフトウェアが機能しない理由を理解できないときに、お尻を噛むことになります...「ダム、変更セット43を見逃しました50のうち...

バグの結果:

あなたのシナリオでは、「修正」をリリースの「ホットフィックス」ブランチに手動で再適用するか、リリース ラインに直接適用したほうがよい場合があります。

これは、バグが本番環境にすり抜けた場合のコストにすぎません。この問題が QA に合格した理由と、将来的にそれを防ぐ方法を理解するのに少し時間を費やしたいと思います。

強化の結果:

財務 (CFO) 担当者は、テストされていないコードを出荷したことの直接的な結果である製品の品質の低下を承認しましたか? そのソフトウェアが組織の資産としてリストされているバランスステートメントを事実上所有しているので、彼らがそうしてくれることを願っています!

回帰サイクル全体を再度完了することなく、1 つの機能だけを構築して他の機能と共にテストし、本番環境に出荷することは現実的ではありません。

結論

すべての変更セットまたは機能を dev から main にマージすることはお勧めしません。それは、適切な人々にハイライトされるべき多くの追加のリスクを伴う悪い考えです!

于 2012-09-27T16:11:55.463 に答える