1

HEAD ブランチと、HEAD ブランチから作成されたフィーチャー ブランチがあります。私はフィーチャー ブランチで開発を行っており、常に HEAD からブランチに変更をマージしています。

機能が完成したら、それを HEAD にマージしようとします。これは、機能ブランチへの以前のマージですべての競合が既に解決されているため、痛みのない操作であると想定されています。しかし、決してそうではありません。

ブランチのコンテンツ全体をコピーし、それで HEAD ブランチを上書きしてしまいます。これは、Team Foundation System 2005 および 2008 での状況です。これはバグですか、それとも何か問題がありますか?

4

2 に答える 2

0

本当にそうです。機能ブランチに2つのチェンジセットがあると仮定し、ヘッドから新しいチェンジセットをマージします。

ヘッド:ベース---------------->H1--
           \\
Ftre:->ブランチ-> F1-> F2-> H1 '

変更が加えられていない場合でも、H1はとは異なるチェックインであることに注意してください(競合の解決)H1'

FtreからHeadにマージして戻すと、チェンジセットF1F2ありH1'、から実行されますが、Headには。の後にBase追加のチェンジセットがあります。H1Base

Headにマージするチェンジセットにはのすべての機能が含まれていることがわかっているので、 Headの変更(つまり、チェンジセット)を破棄し、Ftreからチェンジセットだけを取得H1することに問題はありません。H1ただし、GUIからこれを行うことはできません(最新バージョンで許可されている場合を除く)。残念ながら、TFSを使用してコマンドライン構文を提供してからしばらく経ちました。

于 2009-01-05T11:52:59.127 に答える
0

私はこの欠点を 2 つの方法で克服することができました。

  1. 機能が完了するまで、メインまたは HEAD とマージすることはありません。(機能にとって HEAD の変更が重要でない場合に機能します。)

  2. これは複雑です。HEAD を機能ブランチにマージすることを決定するたびに、HEAD からの統合ブランチと呼ばれるものを作成します。次に、フィーチャー ブランチのブランチ チェンジセットまたはフィーチャー ブランチの最初のチェンジセットのベースレス マージを行います。これにより、ファイルがまとめられ、TFS を使用して 2 つの兄弟間のベースを提供または検出できるようになります。(これは、分岐をたどらない履歴に関係しているように感じます。Team Foundation Power Toys はその問題を修正します。) もちろん、関係の確立を完了するためにチェックインします。次に、機能ブランチと新しい統合ブランチの間で通常のマージを行います。これにより、単一の変更セット内の機能ブランチ アイテムをマージできます。次に、統合ブランチを処理し、機能ブランチを停止させます。確かにフィーチャー ブランチの履歴は失われますが、

申し訳ありませんが、とても複雑です。

于 2009-03-30T17:25:01.897 に答える