機械制御/振動騒音
IR情報 会社情報

PERFORCEテクニカルノート057

image_toyo_ss_img_perforce_title_perforce.gif.gif

image_toyo_common_spacer.gif.gif
テクニカルノート057

image_toyo_common_spacer.gif.gif
 
image_toyo_ss_img_all_line_yellow.gif.gif

PERFORCEが反映すべきリビジョンを決定する方法
image_toyo_common_spacer.gif.gif
このテクニカルノートでは、ユーザが integrate コマンドを実行したとき、反映の対象とすべき反映元ファイルのリビジョン をPERFORCEがどのようにして決定しているのか、そして対応する反映先ファイルにおいて何が起きるのかを説明します。
image_toyo_common_spacer.gif.gif
ユーザが integrate を実行するにあたっては3つのケースがあり、 それぞれについてどのようにリビジョンが選択されるかが異なります。
  1. これは、開始リビジョンと終了リビジョンを選択しないケースです。言い換えれば、 ユーザはパスのみを指定し、PERFORCEが反映元リビジョンを選択するとき、開始リビジョンと終了リビジョンをピックアップします。例えば、 次のように実行した場合です。:
    image_toyo_common_spacer.gif.gif
    p4 integ source/... target/...

    image_toyo_common_spacer.gif.gif
  2. これは、終了リビジョンのみを指定するケースです。例えば、反映元のパスに対して、反映元のパスにおけるチェンジリスト300までのすべての変更を反映する場合、次のように実行します。
    image_toyo_common_spacer.gif.gif
    p4 integ source/...@300 target/...

    image_toyo_common_spacer.gif.gif
    この場合、PERFORCEは開始リビジョンをピックアップします。
  3. これは、開始リビジョンと終了リビジョンの両方を指定するケースです。例えば、チェンジリスト300から 350までの変更を反映元のパスから反映先のパスへ反映する場合、次のように実行します。
    image_toyo_common_spacer.gif.gif
    p4 integ source/...@300,@350 target/...

    image_toyo_common_spacer.gif.gif
ユーザからの integrate コ マンドを受け取った後、PERFORCEはまず初めに反映元ファイルと反映先ファイルのペアを作ります。それから、それぞれのファイルのペアに対して候補となるすべてのリビジョンをリストし、そして過去に反映済みのリビジョンを取り除きます。そこで残ったりビジョンのリストが、どのように反映先ファイルを作業状態にするか、またはしないか、さらに衝突解決をスケジュールするかどうかを決定するために使われます。

image_toyo_ss_img_all_line_dot_526.gif.gif

image_toyo_common_spacer.gif.gif
反映元ファイルと反映先ファイルをペアにする

image_toyo_common_spacer.gif.gif


PERFORCEは、反映元ファイルと反映先ファイルのペアを作るために、ユーザが指定した名前付きのブランチ・ビューか、もしくはユーザが指定した反映 元および反映先のパスを使用します。これらのペアは、反映元/反映先ペアのリストを作るために並べられます。例えば、次のように実行した場合を考えます。
image_toyo_common_spacer.gif.gif
p4 integrate source/... target/...

image_toyo_common_spacer.gif.gif
ここで、"source/foo" と "target/foo" のうちの1つもしくは両方が存在するとすると、 "source/foo target/foo" のペアがリスト内のエントリに書き込まれます。

リスト内のそれぞれのペアに対して、次の2つのステップが独立して実行されます。

image_toyo_ss_img_all_line_dot_526.gif.gif

image_toyo_common_spacer.gif.gif
反映元リビジョンの候補をリスト

image_toyo_common_spacer.gif.gif


PERFORCEは、反映元ファイルのすべてのリビジョンを反映先へ反映するための候補として取り上げます。例えば、source/fooの最新リビジョンが #30 とすると、source/foo を target/foo へ反映するための候補リストは次のようになります。:
image_toyo_common_spacer.gif.gif
開始リビジョン: source/foo#1
終了リビジョン: source/foo#30
              

image_toyo_common_spacer.gif.gif

しかしながら、もしユーザが開始および/または終了リビジョンを指定した場合、PERFORCEはそれに従って候補のリビジョンを調整します。例えば、source/foo@300 が #2 で、source/foo@350 が #10 である場合、次のようになります。:
image_toyo_common_spacer.gif.gif
p4 integrate source@300 target
開始リビジョン: source#1
終了リビジョン: source#2
image_toyo_common_spacer.gif.gif
p4 integrate source@300,@350 target
開始リビジョン: source#2
終了リビジョン: source#10
              

image_toyo_common_spacer.gif.gif

さらに、もし開始から終了の範囲において反映元ファイルが削除されたり再追加されたりしていると、別の調整が行われます。すなわち、開始リビジョンは最も最近に "追加" されたリビジョンに引き上げられます。例えば、source#3 が "削除" され、source#4 が "追加"されていると、上記の例における調整された範囲は次のようになります。:
image_toyo_common_spacer.gif.gif
開始リビジョン: source/foo#4
終了リビジョン: source/foo#10
              

image_toyo_common_spacer.gif.gif

image_toyo_ss_img_all_line_dot_526.gif.gif

image_toyo_common_spacer.gif.gif
過去に反映済みのリビジョンを取り除く

image_toyo_common_spacer.gif.gif


PERFORCEの反映履歴には、過去に反映先ファイルへ反映した反映元ファイルのリビジョンが記録されます。反映先ファイルが反映元ファイルのリビジョ ンからブランチされたものだとすると、ブランチされたリビジョンを含む、それまでのすべての反映元リビジョンは、過去に反映されたものであると判断されま す。そして、過去に反映済みのリビジョンは、候補リビジョンのリストから除外されます。例えば、もしsource#4、source#5、source#9 がすでに反映済みであるとすると、上の例における最終的な反映のためのリビジョンは、次のように#6、#7、#8 および #10 となります。:
image_toyo_common_spacer.gif.gif
source#4
source#5
source#6 (開始リビジョン)
source#7
source#8
source#9
source#10(終了リビジョン)
              

image_toyo_common_spacer.gif.gif

これが、反映のための最終的なリビジョンのリストとなります。さらに、反映先ファイルがサブミットされたとき、この反映元-反映先ペアに対する反映履歴へ追加されるリビジョンのリストとなります。

ここからは、"#start" および "#end"として反映される開始リビジョンおよび終了リビジョンについて述べます。ただし、PERFORCEの中でこのような特別なリビジョン指定子があるわけでは ありません(これに対して、 "#head" および "#have"は、PERFORCEのコマンドの中で使用できる適正なリビジョン指定子です)。 "source#1"は反映元ファイルの最初のリビジョンを意味しますが、"source#start"は反映されるリビジョンのリストにおける開始リビジョンを意味します。そして、"source#head"はディポにおける反映元ファイルの最新リビジョンを意味しますが、"source#end"は反映されるリビジョンのリストにおける終了リビジョンを意味します。

image_toyo_ss_img_all_line_dot_526.gif.gif

image_toyo_common_spacer.gif.gif
反映先ファイルに何が起きるか?

image_toyo_common_spacer.gif.gif


いったんPERFORCEが、与えられた反映元-反映先ペアに対して反映されるリビジョンのリストを決定すると、反映先ファイルに対して何が起こるべきで あるかを決定するためにいくつかのファクタをテストします。(一つのファクタは各リビジョンに関連するアクションであり、filelog コマンドによってこれらを見ることができます。)以下のような可能性があります。:
  • も し、反映先ファイルが存在せず、source#start のアクションが "branch" または "add" の場合、 PERFORCEはsource#end を反映先ファイルにブランチします。反映先ブランチは "branch"目的の作業状態となり、衝突解決はスケジュールされません。

    反映先ファイルをサブミットすることにより、次に示す双方向の反映履歴が作成されます。:
    一つは source#start から source#end までが反映先ファイルに反映されたことを示すエントリであり、もう一つは target#1 が反映元から反映されたことを示すエントリです。
     
  • もし、反映先ファイルが存在せず、source#start のアクションが "branch" でも "add" でもない場合、反映先ファイルは作業状態になりません。

    integrate -d を実行することによって、強制的に反映先ファイルを追加することもできます。-dオプションは、反映先ファイルをbranch目的で作業状態にし、衝突解決をスケジュールしません。(99.2より前のリリースでは、branch目的で作業状態にするのがデフォルトの動きでしたのでご注意ください。)
     
  • 反映元ファイルと反映先ファイルがともに存在し、target#head のアクションが "delete" で、かつ source#start のアクションが "branch" でも "add" でもない場合、反映先ファイルは作業状態になりません。

    integrate -d を実行することによって、削除リビジョンの次に、強制的に反映先ファイルを再追加することもできます。-dオプションは、反映先ファイルをbranch目的で作業状態にし、衝突解決をスケジュールしません。(99.2より前のリリースでは、削除リビジョンの次に、反映先ファイルを再追加するのがデフォルトの動きでしたのでご注意ください。)
     
  • 反 映元ファイルと反映先ファイルがともに存在し、source#end のアクションが "delete"で、かつ反映元ファイルへまだ反映されていない "edit" または "integrate"のリビジョンが反映先ファイルに存在する場合、反映先ファイルは作業状態になりません。

    editリビジョンの次に、反映先ファイルを強制的に削除目的の作業状態にするには、 integrate -d を実行します。-dオプションを用いることによって、反映先ファイルを削除目的で作業状態にし、衝突解決はスケジュールされません。(99.2より前のリリースでは、editリビジョンの次で、反映先ファイルを削除目的の作業状態にするのがデフォルトの動きでしたのでご注意ください。)
     
  • 反 映元ファイルと反映先ファイルがともに存在し、source#start のアクションが "edit" または "integrate"である場合、反映先ファイルは作業状態となり、衝突解決がスケジュールされます。衝突解決をする際、PERFORCEはベースとして開始リビジョンの親リ ビジョン(1つ前のリビジョン)を使って、3-ウェイ・マージを実行します。例えば、開始リビジョンが source#6 で終了リビジョンがsource#10 の場合、3-ウェイ・マージは次のように各リビジョンを使用します。:
    	o "base" として source#5 
    	o "theirs" として source#10
    	o "yours" として target#have
            
    (99.2より前のリリースでは、たとえマージのためのベース・リビジョンが見つからなかったとしても、PERFORCEは反映先ファイルを反映目的の作業状態にします。しかし、衝突解決をしたとき、3-ウェイ・マージのベースとして使用するリビジョン(開 始リビジョンの親リビジョン)が見つかりませんので、PERFORCEは2- ウェイ・マージを実行しようとします。ご注意ください。)

image_toyo_common_spacer.gif.gif
image_toyo_ss_img_all_btn_yellow_bgwhite2.gif.gif戻る

PAGE TOP