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

PERFORCEテクニカルノート029

image_toyo_ss_img_perforce_title_perforce.gif.gif
テクニカルノート029  
image_toyo_ss_img_all_line_yellow.gif.gif
image_toyo_common_spacer.gif.gif
2つのラベルを同期させる
2つのラベルを一度に同期させるには
image_toyo_common_spacer.gif.gif
問題
image_toyo_common_spacer.gif.gif
2つのラベルを一度に同期させるには、どうすればよいでしょうか。
image_toyo_common_spacer.gif.gif
解決策
image_toyo_common_spacer.gif.gif
PERFORCEでは、ラベルはファイル名とリビジョンのリストです。 p4 sync @labelnameの意味は、他のSCMシステムにおける「ラベルに基づいたチェックアウト」の意味とは異なります。コマンドでファイル・パターンが指定されている場合を除き、p4 syncはワークスペース・ビュー全体を処理するため、p4 sync @labelname はラベルにリストされていないファイルを削除することも含め、ワークスペース全体をラベルと同期させます。
image_toyo_common_spacer.gif.gif
したがって、2つのラベルがある場合、連続して各ラベルにクライアント・ワークスペース全体を同期させても、2つのラベルが融合されるわけではありません。 単に、2番目のラベルに同期された状態になるだけです。 しかし、p4 sync コマンドでファイル・パターンを指定することにより、影響を受けるファイルを制限することができます。 例えば、
image_toyo_common_spacer.gif.gif
p4 sync //depot/projectA/...@label
                  
とすると、//depot/projectA にあるファイルにのみ影響します。
image_toyo_common_spacer.gif.gif
ワークスペースからファイルを一切削除することなく、あるラベルが付けられたファイルと同期させたい場合は、@label,label の構文を使用します。 例えば、
image_toyo_common_spacer.gif.gif
p4 sync @label,label
                  
とすると、label により指定されたファイルだけを同期し、他のクライアント・ファイルは処理しません。
image_toyo_common_spacer.gif.gif
繰り返しますが、p4 sync に @label 構文(@label,labelではなく)を使用して実行すると、ワークスペース内のファイルでラベルにリストされていないものは削除されます。
image_toyo_common_spacer.gif.gif
この動作は一貫していますが、他のSCMシステムを使い慣れているユーザには混乱を招くかもしれません。 このような疑問を起こさせる、典型的なシナリオを以下に示します。
image_toyo_common_spacer.gif.gif
プロジェクトAに従事しているユーザが自分たちのファイルにラベル(A42とする)を付けた
プロジェクトBに従事しているユーザが自分たちのファイルにラベル(B42とする)を付けた
「ビルド・プロセス」ではA42およびB42により指定されているファイルが必要である
image_toyo_common_spacer.gif.gif
プロジェクトAとプロジェクトBがディポ内の別々のディレクトリを占有している場合、次のコマンドで両方のラベルを一度に取得できます。
image_toyo_common_spacer.gif.gif
p4 sync //depot/projectA/...@A42 //depot/projectB/...@B42
                  
しかし、プロジェクトAとプロジェクトBのディレクトリ編成によってこれが可能でない場合、ラベルA42とラベルB42とが融合されたラベルを作成することができます。
image_toyo_common_spacer.gif.gif
p4 labelsync -l both42 @A42
p4 labelsync -a -l both42 @B42
                  
(-a(追加)オプションはリリース97.3でp4 labelに追加されています)
image_toyo_common_spacer.gif.gif
こうして、次のコマンドで両方のプロジェクトのラベル付けされたファイルと同期させることができます。
image_toyo_common_spacer.gif.gif
p4 sync @both42
                  
融合されたラベルを作成するのとは別に、上述した @label,label 構文を使用する方法があります。 このシナリオでは、(任意で)ワークスペースを空にして、順番に各ラベルと同期させることができます。 例を示します。
image_toyo_common_spacer.gif.gif
p4 sync #none
p4 sync @A42,A42
p4 sync @B42,B42
                  
ラベルやその他のリビジョン指定子にファイルを同期させるどの場合でも、編集目的で作業状態にされたファイルは処理されないことを覚えておいてください。
image_toyo_common_spacer.gif.gif
ラベルとPERFORCEについての議論は、アトミックな変更との関係に言及しなければ不完全といえるでしょう。 ほとんどのSCMシステムでは、アトミックな変更がサポートされていないためにラベルが使用されており、リビジョンにラベルを付けることが、特定のコード断面のスナップショットを表す唯一の方法です。 例えばほとんどのファイルが火曜日のものであるが特定のファイルは金曜日のものであるなど、整合しない断面を表している場合を除いて、PERFORCEでは、ラベルを使用する必要は全くありません。 上記で "@labelname" を用いて指定されたすべてのラベルは、チェンジ番号に置き換えることができます。
image_toyo_common_spacer.gif.gif
image_toyo_ss_img_all_btn_yellow_bgwhite2.gif.gif戻る

PAGE TOP