p4 resolve
概要
ファイルリビジョン間の衝突を解決します。
構文
p4 [g-opts
] resolve
[-aoptions
]
[-Aoptions
]
[-doptions
]
[-f -n -N -o -t -v]
[-c change
]
[file
…]
解説
p4 resolveは、2つのファイルまたはファイルリビジョンの内容を、ワークスペース内の1つのファイルリビジョンにまとめるのに使用します。ファイルをサブミットする前にp4 resolveを使用しなければならない状況は、以下の2つです。
-
単純な衝突が存在しているとき。すなわち、クライアントワークスペースに対して最後に同期させたファイルのリビジョンが、サブミット時の最新リビジョンではないときです。
例えば、アリスがp4 syncを行い、その後にファイル
file.c
のp4 editを実行します。ボブも同じことをします。アリスがp4 submitでfile.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つのファイルリビジョンを参照しますが、単純に解決できるファイル衝突を修正するのか、変更の反映のために使うのかによって、リビジョンの意味が次のように変わります。
用語 |
単純に衝突を解決する場合 |
反映のために衝突を解決する場合 |
---|---|---|
|
クライアントワークスペース内のファイルのリビジョン |
変更が伝達されようとしている先のファイル。(反映の用語では、これを反映先ファイルと言います。)変更はクライアントワークスペース内のこのファイルのバージョンに対して加えられ、このファイルは後でディポにサブミットされます。 |
|
ディポ内のファイルの最新リビジョン。 |
変更が伝達される元である、ディポ内のファイルリビジョン。(反映の用語では、これを反映元ファイルと言います。)このファイルは、ディポやクライアントワークスペースでは変更されません。 |
|
編集目的で作業状態になる前にクライアントワークスペースに対して同期したファイルリビジョン。 |
|
|
|
左の意味と同じです。 |
解決オプションとその詳細
対話式のp4 resolveダイアログでは以下のオプションが表示されます。ダイアログオプションはコマンドラインオプションと同じではないことに注意してください。
ダイアログオプション |
簡潔な意味 |
内容 |
デフォルトでバイナリファイルに利用できるか |
---|---|---|---|
|
edit merged |
Perforceが生成したマージ済ファイルを編集します。 |
利用できない |
|
edit yours |
現在ワークスペース内にあるファイルのリビジョンを編集します。 |
利用できる |
|
edit theirs |
ワークスペースのリビジョンと衝突しているディポ内のリビジョン(通常、最新リビジョン)を編集します。この編集は読み取り専用です。 |
利用できる |
|
diff yours |
|
利用できない |
|
diff theirs |
|
利用できない |
|
diff merge |
|
利用できない |
|
diff |
|
利用できる |
|
マージ |
次のコマンドを起動します。
このオプションを使用するには、最初の3つのファイルをマージし、その結果を4番目に書き込むサードパーティ製のプログラムの名前に、環境変数 |
利用できない |
|
help |
p4 resolveのヘルプを表示します。 |
利用できる |
|
skip |
すぐに解決を実行しません。 |
利用できる |
|
accept yours |
|
利用できる |
|
accept theirs |
単純な衝突を解決している場合、このオプションは、クライアントワークスペースのファイルに対してp4 revertを実行するのと同じです。反映のために衝突を解決している場合、このオプションは反映元ファイルを反映先ファイルにコピーします。 |
利用できる |
|
accept merge |
|
利用できない |
|
accept edit |
ファイルを編集した場合(p4 resolveダイアログで“ |
利用できない |
|
accept |
Perforceが推奨する結果を保持します。
|
利用できない |
ファイルの衝突解決は、accept
ダイアログオプションのいずれかが選択されたときに完了します。後でファイルを解決するか、変更を元に戻すには、ファイルをskip
します。
p4 resolveにより、ファイルリビジョンに対して加えられた4種類の変更のカウントが表示されるため、どのオプションを選択するかを決めるのに役立ちます。
Diff Chunks: 2 yours + 3 theirs + 5 both + 7 conflicting
これらの値の意味は次のとおりです。
カウント |
意味 |
---|---|
|
|
|
|
|
|
|
|
衝突しているチャンクがない場合、Perforceが生成したマージファイルを受け入れてもほぼ安全です。Perforceが、yours
とtheirs
からのすべての変更をbase
に代入するからです。
衝突しているチャンクがある場合、merge
ファイルを編集する必要があります。この場合、Perforceは衝突しているyours
、theirs
、およびbase
テキストをmerge
ファイルに含めます。どのバージョンのチャンクを保持するかは、任意に選択してください。
異なるテキストは、ファイルマーカにより明示されています。
>>>> ORIGINAL VERSIONfile
#n
<text>==== THEIR VERSIONfile
#m
<text>==== YOUR VERSIONfile
<text><<<<
保持したいテキストを選択し、衝突しているチャンクとすべての差分マーカを削除してください。
オプション
|
解決ダイアログをスキップします。次のようにして自動的にファイル衝突を解決します。
|
|
操作の(内容に関係しない)衝突解決。解決タイプを、ブランチ、削除、ファイルタイプ変更、または移動/リネームに制限します。
詳細については、『P4ユーザーズガイド』および「内容に関係しない衝突解決」を参照してください。 |
|
ファイルをマージする際、空白文字または行末規則に関して指定された差分を無視します。(これらのオプションを指定し、かつファイルの差分が空白文字だけだった場合、p4 resolveはワークスペースのファイル内にあるテキストを使用します。)
|
|
すでに衝突解決済みであるがまだサブミットされていないファイルの衝突再解決を可能にします。 |
|
衝突解決が必要なファイルを、実際に衝突解決を実行せずに一覧表示します。 |
|
スケジュールされている、内容に関係しない衝突解決処理に関する補足情報とともに処理をプレビューします。 |
|
衝突解決時に使用されるベースファイルの名前とリビジョンを出力します。 |
|
バイナリ(非テキスト)ファイルに対しても、3ウェイマージを強制します。これにより、あらゆるタイプのファイル間の差分を検査できます。 |
|
yoursとbase間、およびtheirsとbase間のすべての変更を示す衝突マーカを、ファイルに含めます。通常、yoursとthiresが衝突している場合にのみ、衝突マーカが含まれます。 |
|
衝突解決処理の範囲を、特定のチェンジリスト番号で作業状態にされているファイルに限定します。 |
|
「“グローバルオプション”」を参照してください。 |
使用上の留意点
ファイル引数にリビジョン指定子を使えるか? |
ファイル引数にリビジョン範囲を使えるか? |
最低限必要なアクセスレベル |
---|---|---|
使用不可 |
使用不可 |
|
-
p4 resolveは、すでに衝突解決をスケジュールされているファイルにのみ作用します。ファイルの衝突解決をスケジュールする操作は3つあります。
-
p4 integrateまたはp4 mergeによりファイルの反映を行います。
ファイルの衝突解決をスケジュールする際、p4 integrateでは最も近い共通の祖先がbaseとして選択されます。p4 mergeコマンドでは、反映元ファイルおよび反映先ファイルで共通の編集が最も多いリビジョンが選択されます。
-
-
現在の最新リビジョン以外のリビジョンと同期した作業中ファイルをサブミットします。サブミットは失敗し、ファイルの衝突解決がスケジュールされます。
-
作業中ファイルに対してp4 submitを実行する代わりに、p4 syncを実行します。クライアントワークスペースには何もコピーされず、代わりにファイルの衝突解決がスケジュールされます。(p4 sync経由でファイルの衝突解決をスケジュールすることの利点は、サブミットが失敗しないことです。)
p4 resolveをファイル引数なしで実行すると、すでに衝突解決がスケジュールされているクライアントワークスペース内のすべてのファイルに対して作用します。
-
text
とunicode
ファイルとの反映処理中に変換エラーが発生する場合、その原因として最も考えられるのは、text
ファイル内に非ASCII文字が存在することです。反映の実行前にファイルから非ASCII文字を削除するか、P4CHARSET
をutf8
に設定してから再度マージを実行してみてください。