ファイル チェックイン時の競合のマージおよび解決
次のような場合にファイルをチェックインすると、競合が発生することがあります。
ファイルの日付スタンプが Team Foundation サーバーにチェックインしたバージョンよりも古い場合。古いバージョンのファイルを取得してチェックインしようとした場合に発生します。
ファイルの最新バージョンを取得してから、チェックインするまでに、他のチーム メンバーが変更をチェックインした場合。この場合はファイルが同じであっても、2 種類の変更が存在することになります。
ファイルで変更した行が他のチーム メンバーが変更した行とは異なる場合は、これらの変更は単純な変更と見なされ、[すべてを自動マージ] 機能によって自動的に結合されます。
ファイルで変更した行が他のチーム メンバーが変更した行と同じの場合は、競合と見なされます。競合は複雑なので、手動で解決する必要があります。
競合を解決するのは、初めは難しいこともありますが、競合のさまざまなケースとその対処法を理解する上で役立ちます。詳細については、MSDN の「ファイルの相違点と競合の種類の理解 を参照してください。このトピックは Microsoft Expression Blend や Microsoft Visual Studio Team System 2008 Team Explorer で競合を解決する場合にも参考になります。
[競合の解決] ダイアログ ボックスの使用
チェックイン時に競合が発生する場合は、まず 2 つの選択肢があります。
すべてを自動マージ 競合を自動的に結合します。自動結合機能が使用する結合オプションは、Visual Studio 2008 Team System で Microsoft Team Foundation サーバー管理者によって事前に構成されている必要があります。
自動結合機能は、ファイルで変更した行が他のチーム メンバーが変更した行と異なり、結合が単純な場合にのみ使用できます。それ以外の場合は、手動で解決する必要があります。
メモ :
古いバージョンのファイルをチェックインしようとしたことが原因で競合が発生した場合は、自動結合機能は最新のファイルを優先するので、通常、古いバージョンからのコンテンツが使用されることはありません。古いバージョンのファイルに戻す場合は、MSDN の 「方法: 変更セットをロールバックする を参照してください。
解決 競合を手動で解決します。[バージョンの競合の解決] ダイアログ ボックスが表示され、次のオプションから選択できます。
変更をマージ 自動結合機能を使用します。ファイルで変更した行が他のチーム メンバーが変更した行と同じ場合は、このオプションは無効になります。
マージ ツールで変更をマージ 受け入れる変更を決めるようにというメッセージが表示されます。このオプションを選択すると、マージ ツールが表示されます。次の「マージ ツールの使用」を参照してください。
ローカルの変更を元に戻す ファイルで行った変更を削除し、Team Foundation サーバーでファイルの (日付スタンプではなく) コンテンツを最新バージョンに復元します。
サーバーの変更を破棄 すべての変更点を適用します。ファイルをチェックインする場合は、ファイルのチェックアウト中に他のチーム メンバーが行った変更を削除することになります。ファイルを古いバージョンに戻したい場合にこのオプションを使用します。古いバージョンのファイルに戻す場合は、MSDN の 「方法: 変更セットをロールバックする を参照してください。
注意 :
このオプションを使用する前に変更を元に戻すことを必ずチーム メンバーに知らせてください。
比較 ローカル コピー、ファイルのチェックアウト中に他のチーム メンバーが最近チェックアウトしたコピー、およびファイルがチェックアウトされる前の元ファイルの 3 種類のファイルのうち、2 種類のファイルの相違を比較するウィンドウが表示されます。バージョンの比較は、ローカルの変更を元に戻すか、サーバーの変更を破棄するか、またはマージ ツールで競合を解決するかどうかの判断に迷った場合に便利です。
![]() |
---|
競合を解決してから、他のソース管理タスクを行う前に、必ずソリューションを実行 (F5 キー) してファイルをチェックインするか、または保留中の変更を元に戻してください。たとえば、競合を解決してから、ファイルをチェックインする前に、特定のバージョンのファイルを取得しようとすると、競合を解決するようにというメッセージが一度表示され、[競合の解決] ダイアログ ボックスに「競合している保留中の変更があります。」と表示されます。 |
マージ ツールの使用
マージ ツールを使用すると、競合する個々の行を選択し、結合ファイルに適用したり、ファイルから削除したりすることができます。
マージ ツールの上部には、異なるバージョンのファイルを表示する 2 つのウィンドウがあります。左のウィンドウにファイルをチェックアウト中に他のチーム メンバーによってチェックインされたバージョンが表示され、右のウィンドウにはローカル コピー (未チェックイン) が表示されます。どちらのウィンドウでも、他のチーム メンバーが変更点をチェックインする前からあった元のバージョンのファイルの変更された行が、色分けされています。赤は削除された行、緑はテキストが挿入された行、青はテキストが変更された行を表します。上部の2 つのウィンドウの両方のファイルで同じ行が変更されている場合に、変更が競合と見なされます。
マージ ツールの下部に 3 つ目のウィンドウがあります。最初、このウィンドウには、上部 2 つのウィンドウから、競合していない変更が適用されたファイルの元バージョンが表示されます。
![]() |
手動で解決する必要のある、ローカル バージョンと現在チェックインしているバージョンの両方で変更された行。 |
![]() |
競合している元のバージョンの行。 |
![]() |
ユーザーにより追加され、下の結合ファイルに既に適用されている行。 |
![]() |
ユーザーによる変更と競合しない、最近のチェックインで変更された行。この行は下の結合ファイルに既に適用されており、削除できません。 |
![]() |
現在チェックインしているバージョンから削除された行。ローカル バージョンと競合していないため、この変更は元に戻せません。 |
下部のウィンドウの矩形で囲まれている競合は、手動で解決する必要があります。上部の 2 つのファイルのいずれかの変更を確定するには、次のいずれかの操作を行います。
下のファイルに適用したい変更点のある行をクリックします (下の画像を参照してください)。
適用したい変更点のある行を右クリックし、[変更点の適用] をクリックします。
下のファイルの元の行を右クリックし、[左側の変更点を適用] または [右側の変更点を適用] をクリックします。
適用した変更を削除するには、次のいずれかの操作を行います。
上のファイルのいずれかから既に適用した変更点のある行をクリックします。
上のファイルのいずれかから既に適用した変更点のある行を右クリックし、[変更点の削除] をクリックします。
下のファイルの元の行を右クリックし、[このコンフリクトの変更点を削除] をクリックします。
2 つのウィンドウで競合を適用、または削除した後、下のウィンドウが更新され、解決処理の結果が表示されます。
![]() |
競合している行。結合ファイルに適用する行をクリックします。 |
![]() |
更新された行のバージョンが競合しています。 |
両方の変更点を適用すると、下のウィンドウに両方の行が表示されます。これによりビルド エラーが発生しますが、下のウィンドウで両方の行を比較したい場合に便利です。比較が終わったら、いつでも下のウィンドウから行を削除することができます。
競合するすべての行に、サーバー バージョンのファイルまたはローカル ファイルの変更点をいつでも適用できます。このためには、マージ ツールの内側を右クリックし、[コンフリクトをすべて解決] をポイントし、[左側の変更点] または [右側の変更点] をクリックします。競合する行のみに変更が適用され、競合していない変更のある行は削除されません。
[OK] をクリックしてマージ ツールを終了し、[はい] をクリックしてファイルを保存し、[閉じる] をクリックして [競合の解決] ダイアログ ボックスを閉じます。ファイルをチェックインする前に、必ずソリューションをビルド (Ctrl + Shift + B キー) または実行 (F5 キー) し、結合ファイルのテストを行ってください。
マージ ツールの使用方法については、MSDN の「方法: 2 つのファイルの競合を解決する を参照してください。
競合するファイルの一覧の表示
ファイルをチェックインしようとして、競合を解決せずに [競合の解決] ダイアログ ボックスを閉じた場合は、ソース管理システムがこれらのファイルを追跡します。[プロジェクト] パネルでソリューションをクリックし、[競合の解決] をクリックすると、未解決の競合を含むすべてのファイルをいつでも確認することができます。