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.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からPerforceが生成したファイルリビジョン。ファイルがテキストファイルである場合、解決プロセス中にこのリビジョンを編集できます。

左の意味と同じです。

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

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

ダイアログオプション

簡潔な意味

内容

デフォルトでバイナリファイルに利用できるか

e

edit merged

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

利用できない

ey

edit yours

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

利用できる

et

edit theirs

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

利用できる

dy

diff yours

yoursbase間の差分を表示します。

利用できない

dt

diff theirs

theirsbase間の差分を表示します。

利用できない

dm

diff merge

mergebase間の差分を表示します。

利用できない

d

diff

mergeyours間の差分を表示します。

利用できる

m

マージ

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

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

Perforceが推奨する結果を保持します。

  • 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

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

n theirs

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

n both

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

n conflicting

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

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

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

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

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

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

オプション


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

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

  • -am: 自動モード。Perforce推奨のファイルリビジョンを自動的に受け入れます。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

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

  • -Ab: p4 attributeによって設定された属性を解決します。

  • -Ab: ファイルのブランチ操作、つまり反映元が編集され反映先が削除される反映を解決します。

  • -Ac: ファイル内容の変更を衝突解決します。

  • -Ad: 反映元が削除され反映先が削除される反映を解決します。

  • -At: ファイルタイプの変更

  • -Am: 移動とリネーム

詳細については、『P4ユーザーズガイド』および「内容に関係しない衝突解決」を参照してください。

-doption

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

  • -db: 空白文字のみの変更を無視します。(例えば、タブを8個の空白文字に置換した場合。)

  • -dw: 空白文字を完全に無視します。(例えば、タブやその他の空白文字を削除した場合。)

  • -dl: 行末規則の相違を無視します。

-f

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

-n

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

-N

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

-o

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

-t

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

-v

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

-c change

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

g-opts

“グローバルオプション”」を参照してください。

使用上の留意点

ファイル引数にリビジョン指定子を使えるか?

ファイル引数にリビジョン範囲を使えるか?

最低限必要なアクセスレベル

使用不可

使用不可

open

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

    ファイルの衝突解決をスケジュールする際、p4 integrateでは最も近い共通の祖先がbaseとして選択されます。p4 mergeコマンドでは、反映元ファイルおよび反映先ファイルで共通の編集が最も多いリビジョンが選択されます。

  • 現在の最新リビジョン以外のリビジョンと同期した作業中ファイルをサブミットします。サブミットは失敗し、ファイルの衝突解決がスケジュールされます。

  • 作業中ファイルに対してp4 submitを実行する代わりに、p4 syncを実行します。クライアントワークスペースには何もコピーされず、代わりにファイルの衝突解決がスケジュールされます。(p4 sync経由でファイルの衝突解決をスケジュールすることの利点は、サブミットが失敗しないことです。)

    p4 resolveをファイル引数なしで実行すると、すでに衝突解決がスケジュールされているクライアントワークスペース内のすべてのファイルに対して作用します。

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

関連コマンド

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

p4 resolved

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

p4 integrate

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

p4 submit

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

p4 sync