Team Foundation バージョン管理の競合の解決

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Team Foundation バージョン管理 (TFVC) を使用してファイルを管理する大きな利点は、複数のメンバーがファイルを同時に操作できることです。 欠点の 1 つは、場合によっては、ファイルを取得、チェックイン、アンシェルブ、マージ、またはロールバックする前に、競合を解決する必要があることです。

競合が発生すると手間がかかることもありますが、競合を把握して解決するのに役立つ情報とツールが用意されています。

Resolve コマンドを使用して、コマンド ラインから競合を解決することもできます。

ヒント

大規模なコードベースでのマージ操作の後など、多数の競合を解決するためにチームが共同作業を行う必要がある場合は、共有開発コンピューターのパブリック ワークスペースが役立つ場合があります。 詳細については、「ワークスペースの作成と操作」を参照してください。

競合の解決

Visual Studio の [競合の解決] ウィンドウを使用して、操作を行えない原因となっている競合を解決できます。 ウィンドウを開くには、チーム エクスプローラー[保留中の変更] ページで [アクション]>[競合の解決] の順に選択します。

[競合の解決] ウィンドウを使用して競合を解決するスクリーンショット。

既定では、実行しようとした最後の動作によって発生した競合のみが表示されます。 ウィンドウがこの状態であると、パス フィルターが適用されましたから始まるメッセージが表示されます。 ワークスペースにすべての競合を表示するには、[すべての競合を取得] をクリックします。 <N> 個の競合から始まるメッセージが表示されます。

ワークスペースでファイルを変更してから長時間が経過すると、新しい競合が発生している場合があります。 [競合の解決] ウィンドウの内容を更新するには、[最新の情報に更新] をクリックします。

[競合の解決] ウィンドウを示すスクリーンショット。

それぞれの競合には、競合の解決に役立つ情報が表示され、ときにはリンクも表示されます。 詳細情報を取得するには、競合を選択して、以下のいずれかのオプションを選択します。

  • 履歴アイコン。[履歴] をクリックすると、ファイルの履歴が表示されます。 競合の原因となった操作がマージまたはロール バックの場合、[履歴] の右にあるメニュー コントロールをクリックし、[ソースの履歴] または [ターゲットの履歴] をクリックします。 詳細については、「項目の履歴の取得」を参照してください。

  • 比較アイコン。[比較] をクリックするか、アイコンの横にあるドロップダウン矢印を選択してコマンドを選択します。 [差分] ウィンドウが開きます。

  • 注釈アイコン。[注釈] をクリックすると、変更者、変更日時など、ファイルの最新バージョンに加えられたすべての変更について詳細が表示されます。 「注釈を使用したファイルの変更の表示」を参照してください。

すべての競合を自動解決する

既定では、[すべてを自動解決] をオフにしていない限り、競合の自動解決が試みられます。 [すべてを自動解決] をオフにするには、[ツール]>[オプション] を選択します。 [オプション] ダイアログ ボックスの [ソース管理]>[Visual Studio Team Foundation Server] で、[生成されたときに競合の自動的な解決を試行する] の選択を解除します。

また、[競合の解決] ウィンドウで [すべてを自動解決] を手動で選択して、次のいずれかのオプションを選択することもできます。

  • すべてのヒューリスティックを使用して競合を自動的に解決する場合、[すべての競合の種類] を選択します。

  • 一部のヒューリスティックを除外して競合を解決する場合、[特定の競合の種類] を選択します。

    [解決する競合の選択] ダイアログ ボックスが表示されます。 有効にするオプションをオンにし、無効にするオプションをオフにして、[自動解決] をクリックします。

    [保留中の変更] ウィンドウに表示される競合は、自動的に解決が試行されます。 自動解決できなかった競合は、そのままウィンドウに表示され続けます。 このような競合は手動解決する必要があります。

自動解決のオプションを理解する

[すべてを自動解決] で自動的に解決する競合の種類を制限することができます。 [すべてを自動解決] をクリックし [特定の競合の種類] をクリックすると、[解決する競合の選択] ダイアログ ボックスが表示されます。

[解決する競合の選択] ダイアログ ボックスを示すスクリーンショット。

競合の原因

チェックボックスの選択


ファイルの各バージョンで、競合しないコンテンツ変更が行われた。

左側のファイル バージョンで、先頭に 0 が追加された。 右側のファイルで、最後に 3 が追加された。

競合しないコンテンツ変更のスクリーンショット。

[内容の変更が原因の競合]

ワークスペースに固有の取得操作中またはチェックイン操作中、またはターゲット バージョンに固有のマージ操作中またはロールバック操作中にコンテンツ変更が行われた。

4 および 5 の項目がワークスペースまたはターゲット バージョンに追加された。

ワークスペースまたはターゲットに固有のコンテンツ変更のスクリーンショット。

[ローカル ワークスペースまたはターゲット分岐でのみ行った内容の変更が原因の競合]

サーバーに固有の取得操作中またはチェックイン操作中、またはソース バージョンに固有のマージ操作中またはロールバック操作中にコンテンツ変更が行われた。

4 および 5 の項目がサーバーまたはソース バージョンに追加された。

サーバーまたはソースに固有のコンテンツ変更のスクリーンショット。

[サーバー バージョンまたはソース分岐でのみ行った内容の変更が原因の競合]

取得操作中またはチェックイン操作中にサーバー上で、またはマージ操作中またはロールバック操作中にソース分岐内で、ファイルの名前が変更された。

launch.cs という名前のファイルをチェックアウトし、そのファイルで作業した。 その間に、他のユーザーが同じファイルに影響する変更セットをチェックインした。 その変更セットにより、ファイルのコンテンツは編集されなかったものの、ファイル名が start.cs に変更された。

[サーバー バージョンまたはソース分岐でのファイル名の変更が原因の競合]

一般的なコンテンツ変更が行われた結果、各バージョンのコンテンツが同一になった。 または、ファイルを変更し、それをゲート チェックイン ビルドでチェックインし、[保留中の変更をローカルに保存する] を選択した。

各バージョンに対する変更によって、ファイルのコンテンツが同一になった。 変更とは、たとえば次の例に示すようなファイルのコンテンツの変更です。

両方のバージョンで同じコンテンツの変更を示すスクリーンショット。

[サーバーおよびワークスペースでの同一の変更が原因の競合]

このオプションを使用して、他のすべての操作 (名前変更、削除、削除取り消し、分岐など) が原因で発生した、ファイルが同一になる競合も解決できます。

ヒント

このチェック ボックスをオンにした場合、後続の手順でサーバー バージョンをワークスペースにダウンロードすることで、これらの変更が解決されます。

選択した競合の自動マージ

上記のすべての自動マージ オプションを使用して選択した競合を解決するには、1 つ以上の競合を選択し、[自動マージ] を選択します。

ヒント

複数の競合を選択するには、Ctrl キーまたは Shift キーを押しながら競合を選択します。

注意

自動マージが無効になっている場合は、競合を手動で解決する必要があります。

選択した競合を手動で解決する

競合が自動的に解決できない場合、または変更内容を自分で把握する場合は、手動で競合を解決する必要があります。 それぞれの競合について、競合の解決に使用できる操作が表示されます。 表示される操作は競合の種類や、競合の原因となった操作によって変わります。

[マージ] ウィンドウを使用する

競合するコンテンツの変更が競合の原因である場合は、[マージ ツールで変更をマージする] を選択できます。 [マージ] ウィンドウが表示されます。

[マージ ツールで変更をマージする] を示すスクリーンショット。

[マージ] ウィンドウでは、次の操作を行うことができます。

  • ウィンドウのレイアウトを選択します ([縦表示][横表示]、または [混合表示])。
  • 相違点と競合の間を移動できます。
  • 結果に含める項目を左右のファイルから選択します。
  • [結果] ペインでファイルに追加する内容を入力します。
  • ファイルの履歴を表示します。 詳細については、「項目の履歴の取得」を参照してください。
  • ファイルのバージョンを比較します。
  • だれが何を変更したかがわかるようにファイルの注釈を入力します。 詳細については、「注釈を使用したファイルの変更の表示」を参照してください。

[結果] ペインの内容に満足したら、[マージの許可] をクリックします。

競合を解決した結果が [結果] ペインに表示されます。