Merge コマンド (Team Foundation バージョン管理)

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

Visual Studio 2019 | Visual Studio 2022

tf merge コマンドを使用すると、Team Foundation バージョン管理 (TFVC) 内のブランチ間で変更を適用することができます。

注意

このコマンドの結果は、チェックイン操作を実行するまで Azure DevOps サーバーには反映されません。 詳細については、「コードの開発と保留中の変更の管理」を参照してください。

前提条件

merge コマンドを使用するには、destination を含むワークスペース フォルダーに対して [チェックアウト] アクセス許可が [許可] に設定され、source を含むワークスペース フォルダーに対して [読み取り] アクセス許可が [許可] に設定されている必要があります。 詳細については、「既定の TFVC アクセス許可」を参照してください。

構文

tf merge [/recursive] [/force] [/candidate] [/discard] 
[/version:versionspec] [/lock:none|checkin|checkout] [/preview] 
[/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/format:(brief|detailed)] [/noprompt] [/login:username,[password]] source destination

パラメーター

引数

Argument

説明

<versionspec>

/version オプションに C2 などの値を指定します。 TFVC がバージョン指定を解析してそのスコープ内の項目を判別する方法の詳細については、「Team Foundation バージョン管理コマンドの使用」を参照してください。

<source>

ソースとして機能するファイルまたはフォルダーを指定します。

<destination>

ターゲットとして機能するファイルまたはフォルダーを指定します。

<username>

/login オプションに値を指定します。 username 値は、DOMAIN\username または username として指定できます。

Options

オプション

説明

/recursive

現在のディレクトリとサブフォルダー内の source 項目の指定と一致させます。

/force

マージ履歴を無視し、指定した変更の一部またはすべてが以前にマージされた場合でも、ソースからターゲットにマージします。

/candidate

ターゲットにまだマージされていないソースのすべての変更セットの一覧を出力します。 一覧には、マージされていない変更セット ID と、その変更セットに関するその他の基本情報が含まれています。 特定の結果にあるアスタリスクは、部分的にマージされたことを示しています。つまり、変更セット内の一部の変更のみがマージされ、残りの変更はマージされていないことを意味します。

/discard

マージ操作は行いませんが、マージ履歴を更新して、マージが行われたことを追跡します。 これにより、特定のマージに使用された変更セットが破棄されます。

/version

選択的なマージの場合は、このオプションを使用して、ターゲットにマージする必要がある範囲を指定します。 キャッチアップ マージの場合、このパラメーターは、マージされていないすべての変更がマージされる前のバージョンを指定します。

選択的なマージの場合、バージョン範囲はマージする一連の変更の開始点と終了点を指定します。 たとえば、バージョン 4~6 をマージしようとすると、変更セット 4、5、6 がマージされます。

/lock

ロックの種類を指定するか、項目からロックを削除します。 詳細については、「ロックの種類について」を参照してください。

ロック オプション:

  • None: 項目にロックを設定せず、項目から既存のロックを削除します。

  • Checkin: チェックインを実行してロックを解除するまで、他のユーザーは、指定した項目をチェックアウトできますが、ロックされたファイルのリビジョンはチェックインできません。 他のユーザーが、指定されたどの項目をロックしても、ロック操作は失敗します。

  • Checkout: ロックを明示的に解除するまで、指定した項目のいずれかにユーザーがチェックインまたはチェックアウトできないようにします。 他のユーザーが指定された項目のいずれかをロックした場合、または項目に対して保留中の変更が存在する場合、ロック操作は失敗します。

/preview

マージのプレビューを表示します。

/baseless

基本バージョンを使用せずにマージを実行します。 つまり、ユーザーはマージ リレーションシップがなくてもファイルとフォルダーをマージできます。 ベースレス マージの後、マージ リレーションシップが存在する場合、今後のマージをベースレスにする必要はありません。

注意

ベースレス マージでは、ターゲット内のファイルを削除できません。 このような変更を手動で引き継ぐことができます。

/noimplicitbaseless

TFVC が、関連のない 2 つのバージョン管理ツリーで同じ相対名を持つ 2 つの項目間で暗黙的なベースレス マージを行わないように指定します。

/nosummary

競合、エラー、警告の概要を省略します。

/noprompt

ユーザーからの入力を求めるプロンプトが表示されないようにします。

/conservative

あるブランチを別のブランチにマージすると、より多くの競合が発生します。

/format

マージ競合を要約する形式を指定します。

  • Brief (既定値): 競合、警告、エラーの合計数のみを集計します。
  • Detailed: 競合、警告、エラーの合計数だけでなく、各競合に関する詳細情報も一覧表示されます。

注意

このオプションは、出力に競合の概要が含まれている場合にのみ適用されます。 /nosummary オプションが使用されている場合、またはマージによって発生した競合、警告、エラーが 10 個未満の場合、概要を表示されません。

/login

Azure DevOps でユーザーを認証するためのユーザー名とパスワードを指定します。

解説

tf コマンド ライン ユーティリティの merge コマンドを使用すると、既存のソース ブランチの変更を既存のターゲット ブランチに適用することができます。 個々のリビジョンまたは完全な変更セットをターゲット ブランチにマージできます。 ソースからターゲット ブランチへの変更、またはターゲットから索ソース ブランチへの変更をマージできます。

また、merge コマンドを使用すると、ターゲット ブランチに移行されていないソース ブランチの変更を照会することもできます。 また、このコマンドを使用すると、特定の変更がソースからターゲットにマージされることがなく、マージ操作の候補として表示されなくなります。

tf コマンド ライン ユーティリティの使用方法の詳細については、「Team Foundation バージョン管理コマンドの使用」を参照してください。

ベースレス マージ

ベースレス マージを使用して、互いに直接分岐していない項目をマージします。 ベースレス マージを実行するには、tf merge コマンドを使用する必要があります。 ベースレス マージを実行する際、TFVC にはブランチ内のファイルのリレーションシップに関する情報が何もありません。 ベースレス マージでは、手動で競合を解決する必要があります。 ベースレス マージを実行し、競合を解決すると、TFVC はマージ履歴を記録し、フォルダーとファイル間のリレーションシップを確立します。

tf merge を実行すると、TFVC は、以前に関連した 2 つのバージョン管理ツリーで同じ相対名を持つ項目間で暗黙的なベースレス マージを実行します。 たとえば、関連するブランチ $SRC$TGT をマージするとします。 どちらのブランチにも、a.txt という名前の関連のないファイルが含まれています。 tf merge を実行すると、2 つのファイルが同じであり、FIPS 準拠の暗号化が無効になり、ソース ファイルがターゲット内の他のファイルに関連付けられていない場合、TFVC は 2 つの a.txt ファイル間のリレーションシップを確立します。

/noimplicitbaseless オプションを設定して tf merge を実行した場合、TFVC が 2 つのブランチをマージしようとすると、変更をチェックインしようとしたときに、2 つの a.txt ファイルによって名前空間の競合が発生します。 競合を解決するには、いずれかのファイルの名前を変更する必要があります。

次の例では、MyFile_RTM にマージされていない MyFile_beta1a からの変更をマージします。

c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive

次の例では、変更セット 137 を branch2 にマージします。

c:\projects>tf merge /version:C137~C137 branch1 branch2 /recursive

次の例では、変更セット 137 までのすべての変更セットを branch2 にマージします。

c:\projects>tf merge /version:C137 branch1 branch2 /recursive

次の例では、branch2 にマージされていない branch1 の変更セットの一覧を出力します。

c:\projects>tf merge /candidate branch1 branch2 /recursive

次の例では、branch1 にマージ バックされていない branch2 の変更セットの一覧を出力します。

c:\projects>tf merge /candidate branch2 branch1 /recursive

次の例では、変更セット 137 を branch2 にマージする候補として破棄します。

c:\projects>tf merge /discard /version:C137~C137 branch1 branch2 /recursive

次の例では、branch2 にマージする候補として、変更セット 137 までのすべての変更セットを破棄します。

c:\projects>tf merge /discard /version:C137 branch1 branch2 /recursive