TFS でのブランチ間のマージ?
-
09-06-2019 - |
質問
TFS の直接の親または子ではないブランチにマージすることはできますか?これは私が使用中に経験したことなので、答えはノーだと思います。ただし、承認サイクルが異なる可能性のあるさまざまな機能に取り組んでいる場合、特定の時点で非常に役立つと思われます。特徴 1 かもしれない 機能 2 の前に承認される必要があります)。次の完全バージョンの前にリリースできるように、いくつかの機能を以前のブランチにマージする必要がある運用ブランチがある場合、これは非常に困難になります。
現在のブランチ戦略は、トランク (またはメインラインと呼ばれる) で開発し、安定化して運用環境にリリースするためのブランチを作成することです。このブランチはホットフィックスなどの作成に使用でき、メインラインは今後の機能に分岐することができます。
上記のようなシナリオを軽減するために、他にどのような手法を使用できるでしょうか?
解決
私も Harpreet さんの意見に同意します。分岐構造の設定方法をもう一度見直してみてはいかがでしょうか。ただし、このタイプのマージを本当に実行したい場合は、ベースレス マージと呼ばれるものを使用できます。tfsコマンドプロンプトから実行します。
Tf merge /baseless <<source path>> <<target path>> /recursive
ベースレスマージに関する追加情報が見つかります。 ここ
また、このドキュメントは tfs 分岐構造を構築するときに非常に貴重であることがわかりました。Microsoft Team Foundation Server 分岐ガイダンス
他のヒント
tf.exe merge /recursive /baseless $/TeamProject/SourceBranch $/TeamProject/TargetBranch
分岐戦略を再検討してみるとよいでしょう。実稼働ブランチはどのように取得しますか?開発ブランチからのすべてのコードをマージし、回帰テストを行ってから、修正のために実稼働ブランチを作成していますか?それとも、トランク上で開発を行ってから、安定化してリリースするための実稼働ブランチを作成していますか?2 番目の方法では、あなたが説明しているタイプの問題が発生します。最初のアプローチを使用している場合、トランクはテストされマージされたブランチ上に構築されたもののみを対象としているため、この問題に遭遇する頻度ははるかに低くなります。このアプローチでもまだこの問題が発生する場合は、開発作業が非常に大規模であり、分岐と昇格の層を含む比較的複雑な分岐戦略が必要である可能性があります。
私の知る限り、ブランチが同じ元のフォルダーから作成されている限り、これを行うことができます。
- トランク/
- branches/ - /feature1(トランクから分岐) - /feature2(トランクから分岐)
これを行うと、feature1 と feature2 の間もマージできるはずです。
TFS での分岐/マージの経験では、もっとやりたいと思っています。SVNさえあればよかったのに。
はい、ベースレス マージはコマンド ライン (tf.exe) からのみ実行できます。
TFS を使用すると、親/子ではないブランチとマージできます。これらはベースレス マージと呼ばれます。これらのリンクを参照してください。
私たちは通常、開発ブランチで大きな変更や不安定な変更を行います。当社の製品のメジャー リリースが近づくと、ほぼすべての変更がブランチ上で行われます。
私は TFS の専門家とは程遠いですが、兄弟をマージできると思いますし、それは根拠のないマージではないと思います。
メイン ブランチ (ブランチ名 "main") から機能 (ブランチ名 "feature") を分岐させましたが、メイン ブランチ (ブランチ名 "dev") から分岐したブランチでも作業の一部が必要になりました。私は、feature ブランチと dev ブランチは両方とも同じ親から派生した兄弟であると考えます。機能を開発にマージしたところ、すべてのファイル (14000) がマージとしてマークされ、一部のファイルはマージ、編集としてマークされました。キャンセルできなかったので (Visual Studio がハングするだけです)、マージを受け入れました。次に、dev を main にマージし、次に main を feature にプルし、再び 14000 個のファイルがマージ対象としてマークされました。私は本当に動揺し、この状況が続くのではないかと心配しました。
この時点で、テスト プロジェクトを実行しました。メインをセットアップし、次にメインから開発と機能を分岐させます。上記の手順を繰り返しましたが、同じ結果が得られました。メインからフィーチャーへのマージが完了すると、その後のすべてのマージでは編集されたファイルのみが表示されます。
小さなテストの後、メインから機能へのマージが完了しました。テストと同様に、マージでは編集されたファイルのみが表示されるようになりました。開発から機能、機能からメイン、メインから開発などに移動できます。
分岐時にすべてのファイルの日付が変更されていることに気づきました。もしかしたらこれが問題なのでしょうか?