Helix Core P4コマンドリファレンス (2019.1)

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 syncを行い、その後にファイルfile.cp4 editを実行します。ボブも同じことをします。 アリスがp4 submitfile.cをサブミットし、次にボブがfile.cをサブミットしようとしても失敗します。 ボブのfile.cがディポに受け入れられるとアリスがfile.cに加えた変更が参照できなくなってしまうためです。 ボブがファイルをサブミットするためには、まず衝突を解決する必要があります。

  • p4 integrateを使用して、1つのファイル(またはブランチ)から他のファイルへの変更の反映をスケジュールしているとき。

この2つの状況の主な違いは、単純なファイル衝突を解決するには1つのファイルの複数リビジョンを必要としますが、変更の反映のために衝突を解決するには、異なる2つのファイルを組み合わせる必要があるということです。 いずれの場合も下記のようになります。

  • ファイルタイプがtextである場合、p4 resolveを使用すると、ディポ内のファイルの代わりにクライアントワークスペース内のファイルを使用するか、クライアントワークスペース内のファイルをディポ内のファイルで上書きするか、またはディポのリビジョンとクライアントワークスペースのリビジョンの両方からの変更を1つのファイルにマージすることができます。
  • ファイルタイプがbinaryである場合、通常は最初の2つの選択肢(ワークスペース内のファイルを使用するか、ワークスペース内のファイルをディポ内のファイルで上書きする)しか利用できません。一般的にマージはバイナリファイルに対して機能しないからです。

p4 resolveの出力は主として、本質的に診断内容を表します。ファイルは別のファイルに対して("vs")衝突解決されるか、他のファイルにコピー、マージ、編集、ブランチ、追加、削除、移動または無視されます。 p4 resolveで実行される実際の作業には、それがクライアントワークスペース内のファイルに対して行った変更が反映されます。

衝突の検出に使用されるリビジョン

p4 resolveダイアログは4つのファイルリビジョンを参照しますが、単純に解決できるファイル衝突を修正するのか、変更の反映のために使用するのかによって、リビジョンの意味が次のように変わります。

用語 単純に衝突を解決する場合 反映のために衝突を解決する場合

yours

クライアントワークスペース内のファイルのリビジョン

変更が伝達されようとしている先のファイル(反映の用語では、これを反映先ファイルと言います)。 変更はクライアントワークスペース内のこのファイルのバージョンに対して加えられ、このファイルは後でディポにサブミットされます。

theirs

ディポ内のファイルの最新リビジョン。

変更が伝達される元である、ディポ内のファイルリビジョン(反映の用語では、これを反映元ファイルと言います)。 このファイルは、ディポやクライアントワークスペースでは変更されません。

base

編集目的で作業状態になる前にクライアントワークスペースに対して同期したファイルリビジョン。

theirsの過去の反映済みリビジョン。 yourstheirsの最新の共通の祖先。

merge

yourstheirs、およびbaseからHelixサーバが生成したファイルリビジョン。 ファイルがテキストファイルである場合、解決プロセス中にこのリビジョンを編集できます。

左の意味と同じです。

解決オプションとその詳細

対話式のp4 resolveダイアログでは次のオプションが表示されます。 ダイアログオプションはコマンドラインオプションと同じではないことに注意してください。

ダイアログオプション 簡潔な意味 内容 デフォルトでバイナリファイルに利用できるか

e

edit merged

Helixサーバが生成したマージ済ファイルを編集します。

いいえ

ey

edit yours

現在ワークスペース内にあるファイルのリビジョンを編集します。

はい

et

edit theirs

ワークスペースのリビジョンと衝突しているディポ内のリビジョン(通常、最新リビジョン)を編集します。 この編集は読み取り専用です。

はい

dy

diff yours

yoursbaseの差分を表示します。

いいえ

dt

diff theirs

theirsbaseの差分を表示します。

いいえ

dm

diff merge

mergebaseの差分を表示します。

いいえ

d

diff

mergeyoursの差分を表示します。

はい

m

merge

次のコマンドを起動します。

P4MERGE base theirs yours merge

このオプションを使用するには、最初の3つのファイルをマージし、その結果を4番目に書き込むサードパーティ製のプログラムの名前に、環境変数P4MERGEを設定する必要があります。 P4MERGEが設定されていない場合、このコマンドは無効です。

いいえ

?

help

p4 resolveのヘルプを表示します。

はい

s

skip

すぐに解決を実行しません。

はい

ay

accept yours

theirsで加えられた可能性のある変更を無視して、yoursを受け入れます。

はい

at

accept theirs

theirsを解決済みのリビジョンとしてクライアントワークスペースに受け入れます。 クライアントワークスペースにあったリビジョン(yours)は、上書きされます。

単純な衝突を解決している場合、このオプションは、クライアントワークスペースのファイルに対してp4 revertを実行するのと同じです。 反映のために衝突を解決している場合、このオプションは反映元ファイルを反映先ファイルにコピーします。

はい

am

accept merge

mergedファイルを変更のない解決済のリビジョンとしてクライアントワークスペースに受け入れます。 クライアントワークスペースにあった元のリビジョン(yours)は、上書きされます。

いいえ

ae

accept edit

ファイルを編集した場合(p4 resolveダイアログで「e」を選択して)、クライアントワークスペースにその編集済のバージョンを採用します。 クライアントワークスペースにあった元のリビジョン(yours)は、上書きされます。

いいえ

a

accept

Helixサーバの推奨される結果を保持する。

  • theirsbaseと同一である場合、yoursを受け入れます。
  • yoursbaseと同一である場合、theirsを受け入れます。
  • yourstheirsbaseと異なる場合、yourstheirsに衝突がないときには、mergeを受け入れます。
  • 上記以外の場合は、yourstheirsに衝突があるため、このファイルをスキップします。

いいえ

ファイルの衝突解決は、acceptダイアログオプションのいずれかが選択されたときに完了します。 後でファイルを解決するか、変更を元に戻すには、ファイルをskipします。

p4 resolveにより、ファイルリビジョンに対して加えられた4種類の変更のカウントが表示されるため、どのオプションを選択するかを決めるのに役立ちます。

Diff Chunks: 2 yours + 3 theirs + 5 both + 7 conflicting

これらの値の意味は次のとおりです。

カウント 意味

n yours

n 個のyoursの非衝突セグメントがbaseと異なっています。

n theirs

n 個のtheirsの非衝突セグメントがbaseと異なっています。

n both

n theirsyoursの双方に同様に個の非衝突セグメントがありますが、baseとは異なっています。

n conflicting

n theirsyoursの個のセグメントが互いに異なり、baseとも異なります。

衝突しているチャンクがない場合、Helixサーバが生成したマージファイルを受け入れてもほぼ安全です。Helixサーバが、yourstheirsからのすべての変更をbaseに代入するからです。

衝突しているチャンクがある場合、mergeファイルを編集する必要があります。 この場合、Helixサーバは衝突しているyourstheirs、およびbaseテキストをmergeファイルに含めます。どのバージョンのチャンクを保持するかは、任意に選択してください。

異なるテキストは、ファイルマーカにより明示されています。

>>>> ORIGINAL VERSION file
#n
<text>==== THEIR VERSION file
#m
<text>==== YOUR VERSION file
<text><<<<

保持したいテキストを選択し、衝突しているチャンクとすべての差分マーカを削除してください。

内容に関係しない衝突解決

ファイル内容の相違以外に、関連するファイル間における別の種類の相違(ファイルタイプ、削除、ブランチ、移動、リネーム)を解決することもできます。 詳細については、『Helix Coreサーバユーザーガイド』を参照してください。 処理を1種類の衝突解決に制限するには、-Aオプションを次のように使用します。

オプション 解決される内容

-Aa

p4 attributeによって設定された属性を解決する

-Ab

反映元が編集され、反映先が削除される反映

-Ac

ファイル内容の変更とともに操作内容も解決する

-Ad

反映元が削除され、反映先が編集される反映

-Am

リネームと移動

-At

ファイルタイプの変更

-AQ

文字セットの変更

各解決タイプは別々に処理されます。 例えば、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の変更を無視することができます。

ファイルを処理する場合のオプション

-aoptions
-am
-af
-as
-at
-ay

解決ダイアログをスキップします。次のようにして自動的にファイル衝突を解決します。

  • -am: 自動モード。 推奨のファイルリビジョンを自動的に受け入れます。theirsbaseと等しい場合、yoursを受け入れます。yoursbaseと等しい場合、theirsを受け入れます。yourstheirsbaseと異なり、yourstheirsの間に衝突がない場合、mergeを受け入れます。上記以外の場合、yourstheirsの間に衝突があるため、このファイルをスキップします。
  • -ay: yoursを受け入れて、theirsを無視します。
  • -at: Theirsを受け入れます。 クライアントワークスペース内のファイルが上書きされますので、このオプションは注意して使用してください!
  • -as: 安全受け入れ。 yourstheirsのどちらかがbaseと異なる場合(そして変更が共通である場合)、そのリビジョンを受け入れます。 両方がbaseと異なる場合、このファイルをスキップします。
  • -af: 強制受け入れ。 どんなファイルであれmergeファイルを受け入れます。 mergeファイルに衝突マーカがある場合、マーカはファイルに残されるため、ファイルを編集してマーカを削除する必要があります。

-Aoptions
-Aa
-Ab
-Ac
-Ad
-At
-Am

操作の(内容に関係しない)衝突解決。解決タイプを、ブランチ、削除、ファイルタイプ変更、または移動/リネームに制限します。

  • -Aa: 次によって設定された属性を解決します: p4 attribute
  • -Ab: ファイルのブランチ操作、つまり反映元が編集され反映先が削除される反映を解決します
  • -Ac: ファイル内容の変更を衝突解決します
  • -Ad: 反映元が削除され反映先が削除される反映を解決します
  • -At: ファイルタイプの変更
  • -Am: 移動とリネーム

詳細については、「Helix Coreサーバユーザーガイド」と「内容に関係しない衝突解決」を参照してください。

-doption

ファイルをマージする際、空白文字または行末規則に関して指定された差分を無視します。 (これらのオプションを指定し、かつファイルの差分が空白文字のみだった場合、p4 resolveはワークスペースのファイル内にあるテキストを使用します。)

  • -db: 空白文字のみの変更を無視します(例えば、タブを8個の空白文字に置換した場合)
  • -dw: 空白文字を完全に無視します(例えば、タブやその他の空白文字を削除した場合)
  • -dl: 行末規則の相違を無視します

-f

既に衝突解決済みであるがまだサブミットされていないファイルの衝突再解決を可能にします。

ヒント

再解決されるターゲット (yours) ファイルの内容は、元のファイルの内容ではなく、前回の解決の結果です。 元のファイルを使用するオプションを残すには、解決済みのファイルを元に戻します。 詳細については、「ファイルの場合のコマンド例」を参照してください。

-n

衝突解決が必要なファイルを、実際に衝突解決を実行せずに一覧表示します。

-N

スケジュールされている、内容に関係しない衝突解決処理に関する補足情報とともに処理をプレビューします。

-o

衝突解決時に使用されるベースファイルの名前とリビジョンを出力します。

-t

バイナリ(非テキスト)ファイルに対しても、3ウェイマージを強制します。 これにより、あらゆるタイプのファイル間の差分を検査できます。P4MERGEが非テキストファイルをマージできるユーティリティに設定されている場合、ユーザに非テキストファイルをマージさせます。

-v

yoursとbase間、およびtheirsとbase間のすべての変更を示す衝突マーカを、ファイルに含めます。 通常、yoursとthiresが衝突している場合にのみ、衝突マーカが含まれます。

-c change

衝突解決処理の範囲を、特定のチェンジリスト番号で作業状態にされているファイルに限定します。

g-opts

詳細については、「グローバルオプション」を参照してください。

ストリームを処理する場合のオプション

-Soオプションを指定すると、作業状態のストリーム仕様の衝突のみが解決されます。 例えば、以下のように指定します。

p4 resolve –So [ -af -am -as -at -ay -n -o ]

-af

衝突が含まれているテキストフィールドを強制的に組み合わせます。

-am 変更をマージして衝突を解決し、衝突が含まれているフィールドをスキップします。
-as 安全な衝突解決を実行し、マージが必要なフィールドをスキップします。
-at theirsの変更を強制的に受け入れ、yoursの変更を上書きします。
-ay yoursの変更を強制的に受け入れ、theirsの変更を無視します。
-n 衝突を解決する必要があるフィールドをプレビュー表示します。
-o マージで使用されるベースとなる変更(haveの変更)を出力します。

使用上の留意点

ファイル引数にリビジョン指定子を使えるか? ファイル引数にリビジョン範囲を使えるか? 最低限必要なアクセスレベル

使用不可

使用不可

open

p4 resolve は、既に衝突解決をスケジュールされているファイルにのみ作用します。

ファイルの衝突解決をスケジュールする操作は3つあります。

オプション 説明
p4 integrateまたはp4 mergeによりファイルの反映を行います。
  • ファイルの衝突解決をスケジュールする際、p4 integrateでは最も近い共通の祖先がbaseとして選択されます。
  • p4 mergeコマンドでは、反映元ファイルおよび反映先ファイルで共通の編集が最も多いリビジョンが選択されます。
現在の最新リビジョン以外のリビジョンと同期した作業中ファイルをサブミットします。 サブミットは失敗し、ファイルの衝突解決がスケジュールされます。
作業中ファイルに対してp4 syncを実行する代わりに、p4 submitを実行します。 クライアントワークスペースには何もコピーされません。 代わりに、ファイルの衝突解決がスケジュールされます。 p4 sync経由でファイルの衝突解決をスケジュールすることの利点は、サブミットが失敗しないことです。

注意

textunicodeファイルとの反映処理中に変換エラーが発生する場合、その原因として最も考えられるのは、textファイル内に非ASCII文字が存在することです。 反映の実行前にファイルから非ASCII文字を削除するか、P4CHARSETutf8に設定してから再度マージを実行してみてください。

ファイルの場合のコマンド例

-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

関連コマンド

衝突解決済みであるがサブミットされていないファイルの一覧を表示する

p4 resolved

2つの異なるファイル間の変更の伝達をスケジュールする

p4 integrate

変更済ファイルセットをディポにサブミットする

p4 submit

クライアントワークスペースにファイルをコピーするか、作業中ファイルの衝突解決をスケジュールする

p4 sync