p4 resolve
ファイルリビジョン間の衝突を解決する場合や、ストリーム仕様の衝突を解決する場合に、このコマンドを使用します。
構文規則
p4 [g-opts] resolve [-a options] [-A options] [-d options] [-f -n -N -o -t -v] [-c change] [file ...]
p4 resolve -So [ -af -am -as -at -ay -n -o ]
ファイルリビジョン間の衝突を解決する場合
p4 resolve
は、2つのファイルまたはファイルリビジョンの内容を、ワークスペース内の1つの
ファイルリビジョンにまとめるのに使用します。
p4 resolve
をファイル引数なしで実行すると、既に衝突解決がスケジュールされている
クライアントワークスペース内のすべてのファイルに対して作用します。
ファイルをサブミットする前にp4 resolve
を使用しなければならない状況は、
以下の2つの場合です。
-
単純な衝突が存在しているとき。すなわち、クライアントワークスペースに対して最後に 同期させたファイルのリビジョンが、サブミット時の最新リビジョンではないときです。
以下に例を示します。
p4 integrate
を使用して、1つのファイル(またはブランチ)から他のファイルへの 変更の反映をスケジュールしているとき。
この2つの状況の主な違いは、単純なファイル衝突を解決するには1つのファイルの 複数リビジョンを必要としますが、変更の反映のために衝突を解決するには、 異なる2つのファイルを組み合わせる必要があるということです。 いずれの場合も下記のようになります。
- ファイルタイプが
text
である場合、p4 resolve
を使用すると、ディポ内のファイルの代わりに クライアントワークスペース内のファイルを使用するか、 クライアントワークスペース内のファイルをディポ内のファイルで上書きするか、 またはディポのリビジョンとクライアントワークスペースのリビジョンの 両方からの変更を1つのファイルにマージすることができます。 - ファイルタイプが
binary
である場合、通常は最初の2つの選択肢 (ワークスペース内のファイルを使用するか、ワークスペース内のファイルをディポ内の ファイルで上書きする)しか利用できません。一般的にマージは バイナリファイルに対して機能しないからです。
p4 resolve
コマンドを実行すると、診断情報が表示されます。
ファイルは別のファイルに対して("vs")衝突解決されるか、他のファイルにコピー、
マージ、編集、ブランチ、追加、削除、移動または無視されます。p4
resolve
で実行される実際の作業には、
それがクライアントワークスペース内のファイルに対して行った変更が反映されます。
エッジサーバ 「p4 integrate」などほとんどの読み取り/書き込みコマンドを処理し、さらにバージョン化ファイル(ディポファイル)を送信することができるエッジ/コミットシステムの一部であるレプリカサーバ。から取得された伝播属性を持つファイルの場合、p4 resolveを使用することはできません。
リビジョン範囲の使用方法については、「リビジョン範囲の使用」を参照してください。
衝突の検出に使用されるリビジョン
p4 resolve
ダイアログは4つのファイルリビジョンを参照しますが、単純に解決できる
ファイル衝突を修正するのか、変更の反映のために使うのかによって、
リビジョンの意味が次のように変わります。
用語 | 単純に衝突を解決する場合 | 反映のために衝突を解決する場合 |
---|---|---|
yours |
クライアントワークスペース内のファイルのリビジョン |
変更が伝達されようとしている先のファイル(反映の用語では、 これを反映先ファイルと言います)。 変更はクライアントワークスペース内のこのファイルのバージョンに対して加えられ、 このファイルは後でディポにサブミットされます。 |
theirs |
ディポ内のファイルの最新リビジョン。 |
変更が伝達される元である、ディポ内のファイルリビジョン(反映の用語では、 これを反映元ファイルと言います)。 このファイルは、ディポやクライアントワークスペースでは変更されません。 |
base |
編集目的で作業状態になる前にクライアントワークスペースに対して同期した ファイルリビジョン。 |
base ファイルの場合は、反映元ファイルと反映先ファイルにあるファイルリビジョンの中で共通の編集または変更が最も多いファイルリビジョンのことを指します。 チェックアウト後のストリームの場合は、チェックアウト済みバージョンの派生元であるパブリックバージョンのことを指します。リビジョンの場所は、反映元パスと反映先パスのどちらでもかまいません。 |
merge |
yours、theirs、およびbaseから Helixサーバが生成したファイルリビジョン。 ファイルがテキストファイルである場合、解決プロセス中に このリビジョンを編集できます。
|
解決オプションとその詳細
対話式のp4 resolve
ダイアログでは次のオプションが表示されます。
ダイアログオプションはコマンドラインオプションと同じではないことに注意してください。
ダイアログオプション | 簡潔な意味 | 内容 | デフォルトでバイナリファイルに利用できるか |
---|---|---|---|
|
edit merged |
Helixサーバが生成したマージ済ファイルを編集します。 |
いいえ |
|
edit yours |
現在ワークスペース内にあるファイルのリビジョンを編集します。 |
はい |
|
edit theirs |
ワークスペースのリビジョンと衝突しているディポ内のリビジョン(通常は 最新リビジョン)を編集します。この編集は読み取り専用です。 |
はい |
|
diff yours |
yoursとbaseの差分を表示します。 |
いいえ |
|
diff theirs |
theirsとbaseの差分を表示します。 |
いいえ |
|
diff merge |
mergeとbaseの差分を表示します。 |
いいえ |
|
diff |
mergeとyoursの差分を表示します。 |
はい |
|
merge |
次のコマンドを起動します。 P4MERGEbasetheirsyoursmerge このオプションを使用するには、最初の3つのファイルをマージし、
その結果を4番目に書き込むサードパーティ製のプログラムの名前に、
環境変数 |
いいえ |
|
help |
|
はい |
|
skip |
すぐに解決を実行しません。 |
はい |
|
accept yours |
theirsで加えられた可能性のある変更を無視して、 yoursを受け入れます。 |
はい |
|
accept theirs |
theirsを解決済みのリビジョンとしてクライアントワークスペースに受け入れます。 クライアントワークスペースにあったリビジョン(yours)は、上書きされます。 単純な衝突を解決している場合、このオプションは、クライアントワークスペースの
ファイルに対して |
はい |
|
accept merge |
mergedファイルを変更のない解決済のリビジョンとしてクライアント ワークスペースに受け入れます。クライアントワークスペースにあった 元のリビジョン(yours)は、上書きされます。 注意
マージの解決を手動で許可することは( マージの解決を手動で許可する場合、意識的な選択を行うことになります。
|
いいえ |
|
accept edit |
ファイルを編集した場合( |
いいえ |
|
accept |
Helixサーバの 推奨される結果を保持します。
|
いいえ |
ファイルの衝突解決は、accept
ダイアログオプションのいずれかが
選択されたときに完了します。後でファイルを解決するか、変更を元に戻すには、
ファイルをskip
します。
p4
resolve
により、ファイルリビジョンに対して加えられた4種類の変更の
カウントが表示されるため、どのオプションを選択するかを決めるのに役立ちます。
Diff Chunks: 2 yours + 3 theirs + 5 both + 7 conflicting
これらの値の意味は次のとおりです。
カウント | 説明 |
---|---|
|
|
|
|
|
theirsとyoursの双方に |
|
|
衝突しているチャンクがない場合、 生成後のマージファイルを受け入れてもほぼ安全です。 Helixサーバが、 yoursとtheirsからのすべての変更を baseに代入するからです。
衝突しているチャンクがある場合、mergeファイルを編集する必要があります。 この場合、Helixサーバにより、 衝突しているyours テキスト、theirs テキスト、base テキストが merge ファイルに挿入されます。 保持するチャンクのバージョンを選択することができます。
異なるテキストは、ファイルマーカにより明示されています。
>>>> ORIGINAL VERSION file #n <text>==== THEIR VERSION file #m <text>==== YOUR VERSION file <text><<<<
保持するテキストを選択し、衝突しているチャンクとすべての差分マーカを削除してください。
内容に関係しない衝突解決
関連ファイル間の他の競合(ファイルタイプ、削除、ブランチ、移動、 ファイル名の変更に関する競合)を解決することもできます。 詳細については、『Helix Coreコマンドライン(P4)ガイド』の 「衝突を解決する」を参照してください。
処理を1種類の衝突解決に制限するには、
-A
オプションを次のように使用します。
オプション | 解決される内容 |
---|---|
|
|
|
反映元を編集し、反映先を削除する |
|
ファイル内容の変更とともに操作内容も解決する |
|
反映元を削除し、反映先を編集する |
|
リネームと移動 |
|
ファイルタイプの変更 |
|
文字セットの変更 |
各解決タイプは別々に処理されます。
例えば、1つのファイルにファイルタイプの衝突と内容の衝突がある場合、
個別に処理方法の指定を要求されます。
すべての解決について同じ結果を望む場合にファイル単位での入力を
要求されないようにするには、-A
オプションの後に-at
または
-ay
オプションを指定します。
以下の例は、異なる衝突解決に対する入力要求の動作を示します。
Merging //depot/rel/fileb#1 Diff chunks: 1 yours + 0 theirs + 0 both + 0 conflicting Accept(a) Edit(e) Diff(d) Merge (m) Skip(s) Help(?) ay: m //depot/main/filez - resolve skipped. Resolving move to //depot/main/fileb Filename resolve: at: //depot/main/fileb ay: //depot/main/filez
ストリーム仕様の衝突を解決する場合
ここでは、クライアントAとクライアントBという2つのクライアントで同じストリーム仕様を編集する場合について考えてみます。最初に、クライアントAでストリーム仕様を編集用として開きます。次に、クライアントBで同じストリーム仕様を編集用として開いてサブミットします(または、グローバルな編集を行い、編集内容をクライアントAと同じストリーム仕様に保存します)。この状態でクライアントAでストリーム仕様を開くと、衝突が発生することになります。
p4 submit [-Si|-So|-Sx]コマンドを実行すると衝突状態が検出され、作業状態のストリームのサブミットが禁止されます。
p4 resolve –So [ -af -am -as -at -ay -n -o ]コマンドを実行すると、衝突のプレビューを表示することができます。また、変更内容をマージして衝突を解決することもできます。resolveコマンドでは、theirsの変更またはyoursの変更を無視することができます。
ファイルを処理する場合のオプション
|
解決ダイアログをスキップします。次のようにして自動的に ファイル衝突を解決します。
注意
ブランチAでファイルを削除してブランチBでは削除しなかった場合、ブランチBを ブランチAにマージすると衝突が発生します。この状態で |
|
操作の衝突解決: 解決タイプを、ブランチ、削除、ファイルタイプ変更、または移動/リネームに制限します。
詳細については、 Helix Coreコマンドライン(P4)ガイドと 「内容に関係しない衝突解決 」を 参照してください。 |
|
ファイルをマージする際、空白文字または行末規則に関して指定された
差分を無視します。(これらのオプションを指定し、かつファイルの差分が
空白文字のみであった場合、
|
|
既に衝突解決済みであるがまだサブミットされていないファイルの 衝突再解決を可能にします。 ヒント
再解決されるターゲット(yours)ファイルの内容は、元のファイルの内容ではなく、前回の解決の結果です。元のファイルを使用するオプションを残すには、解決済みのファイルを元に戻します。詳細については、「ファイルの場合のコマンド例」を参照してください。 |
|
衝突解決が必要なファイルを、実際に衝突解決を実行せずに一覧表示します。 |
|
スケジュールされている、内容に関係しない衝突解決処理に関する 補足情報とともに処理をプレビューします。 |
|
衝突解決時に使用されるベースファイルの名前とリビジョンを出力します。 |
|
バイナリ(非テキスト)ファイルに対しても、3ウェイマージを強制します。
これにより、あらゆるタイプのファイル間の差分を検査できます。
|
|
yoursとbase間、およびtheirsとbase間のすべての変更を示す衝突マーカを、 ファイルに含めます。通常、yoursとthiresが衝突している場合にのみ、 衝突マーカが含まれます。 |
|
衝突解決処理の範囲を、特定のチェンジリスト番号で作業状態にされている ファイルに限定します。 |
|
「グローバルオプション」を参照してください。 |
ストリームを処理する場合のオプション
-Soオプションを指定すると、作業状態のストリーム仕様の衝突のみが解決されます。以下に例を示します。
p4 resolve –So [ -af -am -as -at -ay -n -N -o ]
|
衝突が含まれているテキストフィールドを強制的に組み合わせます。 |
-am
|
変更をマージして衝突を解決し、衝突が含まれているフィールドをスキップします。 |
-as
|
安全な衝突解決を実行し、マージが必要なフィールドをスキップします。 |
-at
|
theirsの変更を強制的に受け入れ、yoursの変更を上書きします。 |
-ay | yoursの変更を強制的に受け入れ、theirsの変更を無視します。 |
-n | 衝突を解決する必要があるフィールドをプレビュー表示します。 |
-o | マージで使用されるベースとなる変更(haveの変更)を出力します。 |
使用上の注意点
ファイル引数でリビジョン指定子を使用できるか? | ファイル引数でリビジョン範囲を使用できるか? | 最低限必要なアクセスレベル |
---|---|---|
いいえ |
いいえ |
|
p4 resolve このコマンドは、既に衝突解決がスケジュールされているファイルにのみ作用します。
ファイルの衝突解決をスケジュールする操作は3つあります。
オプション | 説明 |
---|---|
p4 integrate またはp4 merge によりファイルの反映を行います。
|
|
現在の最新リビジョン以外のリビジョンと同期した作業中ファイルをサブミットします。 | サブミットは失敗し、ファイルの衝突解決がスケジュールされます。 |
作業中ファイルに対してp4 sync を実行する代わりに、
p4
submit を実行します。 |
クライアントワークスペースには何もコピーされません。
代わりに、ファイルの衝突解決がスケジュールされます。
p4 sync 経由でファイルの衝突解決をスケジュールすることの利点は、
サブミットが失敗しないことです。 |
text
ファイルとunicode
ファイルの反映処理中に
変換エラーが発生した場合、最も可能性の高い原因として、
text
ファイルに非ASCII文字が存在していることが考えられます。
その場合は、反映を行う前にファイルから非ASCII文字を削除するか、
P4CHARSET
の値を「utf8
」に設定してから、
もう一度マージを実行してください。
ファイルの場合のコマンド例
-f
フラグを使用したファイルの再解決は、解決済みのファイルを元に戻して再度解決を実行することとは必ずしも同じではありません。最初の解決でtheirsを受け入れる(-at
)オプションを使用したと仮定します。
>$ p4 resolve -at $ /Users/bruno/dir8/dir2/fileA.txt - vs //depot/dir6/dir2/fileA.txt#2 //bruno/dir8/dir2/fileA.txt - copy from //depot/dir6/dir2/fileA.txt
再解決以外は、代わりにyoursを受け入れる(-ay
)オプション使用します。
> $ p4 resolve -f -ay /Users/bruno/dir8/dir2/fileA.txt - vs //depot/dir6/dir2/fileA.txt#2 //bruno/dir8/dir2/fileA.txt - copy from //depot/dir6/dir2/fileA.txt
この場合、ディポのバージョンは無視されているディポのバージョンの代わりにクライアントワークスペースにコピーされます。
ストリームの衝突を解決する場合のコマンド例
衝突が存在する場合、以下のような出力が表示され、作業状態のストリームに対する編集内容をサブミットすることはできません。
p4 -c ws0 submit -d "Conflict detected?" -So
Submitting change 5.
Stream //root/main is out of date; run 'p4 stream resolve'.
ストリームの衝突解決のプレビューは、以下のように表示されます。
p4 -c ws0 resolve -So -n
//root/main Paths - resolving //root/main@4
変更をマージしてストリームの衝突を解決する場合、–amオプションを指定すると衝突解決が失敗しますが、–afオプションを指定すると成功します。
p4 -c ws0 resolve -So -am
//root/main Paths - skipped //root/main@4
p4 -c ws0 resolve -So -af
//root/main Paths - combined with //root/main@4
「Paths:」フィールドは、以下のようになります。
Paths:
share a # open
share c # open
share b # open
関連コマンド
衝突解決済みであるがサブミットされていないファイルの一覧を表示する |
|
2つの異なるファイル間の変更の伝達をスケジュールする |
|
変更済ファイルセットをディポにサブミットする |
|
クライアントワークスペースにファイルをコピーするか、 作業中ファイルの衝突解決をスケジュールする |