ラベル

Perforceのラベルとは、タグ付けされた一連のファイルリビジョンを意味します。例えば、特定のリリースを構成するファイルリビジョンをラベルrelease2.0.1でタグ付けします。一般的に、次の目的でラベルを使用します。

  • ソフトウェアの特定のリリースに含まれるすべてのファイルリビジョンの追跡

  • 特定のファイルリビジョンのセット(例えば、標準構成ファイル)の他のユーザへの配布

  • 新規ビルドワークスペースの作成

  • 開発目的でブランチするファイルリビジョンのセットの指定

  • リビジョンの1つのグループとしてのクライアントワークスペースへの同期

ラベルとチェンジリスト番号は両方、特定のファイルリビジョンのセットを参照しますが、次のような違いがあります。

  • ラベルは任意のファイルリビジョンのセットを参照できます。チェンジリスト番号は、チェンジリストがサブミットされた時点でディポにあるすべてのファイルのコンテンツを参照します。異なる時点におけるファイルリビジョンのグループを参照する必要がある場合、ラベルを使用します。ファイルが用途に合致している時点がある場合、チェンジリスト番号を使用します。

  • ラベルの内容を変更できます。サブミット済みチェンジリストの内容を変更することはできません。

  • ラベルには独自の名前を割り当てることができます。チェンジリスト番号はPerforceによって割り当てられます。

チェンジリストは、通常ラベルを使用するアプリケーションに適しています。ラベルと異なり、チェンジリストはある特定の時点におけるファイルセットの状態を表します。ラベルが必要であると仮定する前に、チェンジリスト番号を参照することで要件を満たせるか検討してください。

ラベルを使用してファイルにタグ付けする

すでにタグ付けされたリビジョン以外にファイルリビジョンのセットにタグ付けするには、p4 tagを使用して、ラベル名と対象のファイルリビジョンを指定します。

例えば、//depot/release/jam/2.1/src/の下にあるファイルの最新リビジョンにラベルjam-2.1.0をタグ付けするには、次のコマンドを発行します。

p4 tag -l jam-2.1.0 //depot/release/jam/2.1/src/...

最新リビジョン以外のリビジョンにタグ付けするには、次のファイルパターンでチェンジリスト番号を指定します。

p4 tag -l jam-2.1.0 //depot/release/jam/2.1/src/...@1234

指定したラベルをタグ付けできるのは、指定したファイルの1つのリビジョンのみですが、同じファイルリビジョンは複数のラベルでタグ付けすることができます。

ファイルのタグ付けを解除する

次のコマンドを使用してタグ付けを解除できます。

p4 tag -d -l labelname filepattern

このコマンドは指定したラベルとそれによってタグ付けされたファイルリビジョンとの間の関連付けを削除します。例えば、//depot/release/jam/2.1/src/...の下のすべてのリビジョンがjam-2.1.0にタグ付けされている場合、次のコマンドを使用してヘッダファイルのみのタグ付けを解除できます。

p4 tag -d -l jam-2.1.0 //depot/release/jam/2.1/src/*.h

タグ付けの結果をプレビューする

p4 tagの結果はp4 tag -nを使用してプレビューできます。このコマンドは、実際に操作を実行することなく、タグ付け、タグ付けの解除、または再タグ付けされるリビジョンをリスト表示します。

ラベルによってタグ付けされたファイルをリスト表示する

labelnameでタグ付けされたリビジョンをリスト表示するには、p4 filesを使用して、次のようにラベル名を指定します。

p4 files @labelname

labelnameでタグ付けされたすべてのリビジョンが、ファイルタイプ、チェンジ操作、およびチェンジリスト番号と一緒にリスト表示されます。(このコマンドは、p4 files //...@labelnameと同等です。)

ファイルに適用済みのラベルをリスト表示する

ファイルに適用済みのすべてのラベルをリスト表示するには、次のコマンドを使用します。

p4 labels filepattern

ラベルを使用してファイルリビジョンを指定する

リビジョン(#1#head)、チェンジリスト番号(@7381)、または日付(@2011/07/01)別でファイルを参照できる場所であれば、ラベル名を使用することができます。

p4 sync @labelnameコマンド発行時にファイル引数を省略すると、そのラベルによってタグ付けされたクライアントワークスペースビュー内のすべてのファイルは、ラベルで指定されたリビジョンに同期されます。そのラベルでタグ付けされたリビジョンを含まないワークスペース内のすべてのファイルはワークスペースから削除されます。作業状態のファイルまたはPerforceの管理下にないファイルは影響を受けません。このコマンドは、p4 sync //...@labelnameと同等です。

p4 syncコマンド発行時にファイル引数を指定すると(p4 sync files@labelname))、ワークスペース内にあり、ラベルでタグ付けされたファイルがタグ付けされたリビジョンに同期されます。

Example 34. ラベルによってタグ付けされたファイルをクライアントワークスペースに取得する

アールのラベルjam-2.1.0によってタグ付けされたファイルをクライアントワークスペースに取得するため、ブルーノは次のコマンドを発行します。

p4 sync @ jam-2.1.0

すると、次のように表示されます。

//depot/dev/main/jam/Build.com#5 - updating c:\bruno_ws\dev\main\jam\Build.com
//depot/dev/main/jam/command.c#5 - updating c:\bruno_ws\dev\main\jam\command.c
//depot/dev/main/jam/command.h#3 - added as c:\bruno_ws\dev\main\jam\command.h
//depot/dev/main/jam/compile.c#12 - updating c:\bruno_ws\dev\main\jam\compile.c
//depot/dev/main/jam/compile.h#2 - updating c:\bruno_ws\dev\main\jam\compile.h
<etc>

ラベルを削除する

ラベルを削除するには、次のコマンドを使用します。

p4 label -d labelname

ラベルを削除しても、タグ付けされたファイルリビジョンには影響しません(ただし、リビジョンのタグ付けはなくなります)。

今後使用するためにラベルを作成する

どのファイルリビジョンにタグ付けせずにラベルを作成するには、p4 label labelnameコマンドを作成します。このコマンドには、ラベルを説明したり指定したりするフォームが表示されます。ラベル作成後、p4 tagまたはp4 labelsyncを使用して、ファイルリビジョンにそのラベルを適用することができます。

ラベル名をクライアントワークスペース、ブランチ、またはディポ名と同じにすることはできません。

例えば、jam-2.1.0,を作成するには、次のコマンドを発行します。

p4 label jam-2.1.0

次のフォームが表示されます。

Label:    jam-2.1.0
Update:    2011/03/07 13:07:39
Access:    2011/03/07 13:13:35
Owner:    earl
Description:
     Created by earl.
Options:     unlocked noautoreload
View:
     //depot/...

ラベルの説明を入力し、フォームを保存します。(View:フィールドを変更する必要はありません。)

ラベル作成後は、p4 tagコマンドおよびp4 labelsyncコマンドを使用して、ファイルリビジョンにそのラベルを適用することができます。

タグ付けできるファイルを制限する

p4 labelフォームにあるView:フィールドは、ラベルを使用してタグ付けできるファイルを制限します。デフォルトのラベルビューにはディポ全体(//depot/...)が含まれます。ディポ内の各ファイルに対して不用意にタグ付けをしないようにするには、ラベルのView:フィールドでディポシンタックスを使用して、タグ付け可能なファイルとディレクトリを設定します。

Example 35. ラベルビューを使用してタグ付け可能なファイルファイルを制御する

アールは、リリース2.1ブランチ内のソースコードのリビジョンにタグ付けしたいと考えています。アールは正常にコンパイルできることを知っています。p4 label jam-2.1.0と入力し、ラベルの範囲を制限するために、ラベルのView:フィールドを使用します。

Label:    jam-2.1.0
Update:    2011/03/07 13:07:39
Access:    2011/03/07 13:13:35
Owner:    earl
Description:
     Created by earl.
Options:     unlocked noautoreload
View:
     //depot/release/jam/2.1/src/...

このラベルがタグ付けできるのは、リリース2.1ソースコードディレクトリにあるファイルだけです。

静的ラベルを使用してワークスペースの設定をアーカイブする

p4 labelsyncコマンドを発行することで、静的ラベルを使用してクライアントワークスペースの状態(現在同期されているファイルリビジョン)をアーカイブすることができます。指定するラベルには、クライアントワークスペースと同じビューがなければなりません。

例えば、既存のws_configラベルを使用して現在のクライアントワークスペースの設定を記録するには、次のコマンドを使用します。

p4 labelsync -l ws_config

現在のワークスペースに同期されていて、クライアントワークスペースビューとラベルビュー(ある場合)の両方から表示されるすべてのファイルリビジョンは、ws_configラベルでタグ付けされます。これまでws_configラベルでタグ付けされていて、ワークスペースから削除された(p4 sync #none)ファイルのタグ付けは解除されます。

ws_configラベルでタグ付けされたファイルを同期させる(結果として、ワークスペースの設定を再作成する)には、次のコマンドを発行します。

p4 sync @ws_config

Note

autoreloadまたはnoautoreload、いずれかのオプションを使用して静的ラベルの保存方法を制御することができます。

  • autoreloadにはアンロードディポにあるラベルが保存されます。この保存オプションにより、ラベルを多用するサイトでのパフォーマンスが向上します。

  • noautoreloadにはdb.labelテーブルにあるラベルが保存されます。

これらの保存オプションは動的ラベルに影響しません。

動的ラベルをチェンジリストや他のリビジョンのエイリアスとして使用する

動的ラベルを使用すると、p4 labelsyncコマンドを発行せずにファイルの特定のリビジョンを指定することができます。

動的ラベルを作成するには、p4 labelフォームのRevision:フィールドにリビジョン指定子を入力します。ワークスペースを動的ラベルに同期させると、Revision:フィールドの内容がView:フィールドのすべてのファイルに適用されます。

Example 36. 動的ラベルをチェンジリスト番号のエイリアスとして使用します。

アールはビルドプロセスを毎晩実行していて、チェンジリスト1234の製品のビルドに成功しました。毎晩のビルドごとの固有のチェンジリストを覚えておかなくてもいいように、アールはp4 label nightly20111201と入力して、ラベルのRevision:フィールドを使用し、チェンジリスト1234のすべてのファイルにnightly20111201ラベルがタグ付けされるようにします。

Label:    nightly20111201
Owner:    earl
Description:
     Nightly build process.
Options:     unlocked noautoreload
View:
     //depot/...
Revision:
     @1234

この方法の利点は、非常に簡単にスクリプトを修正することができ、ラベルテーブルのスペースをほとんど必要としない以外にも、どのチェンジリスト番号が毎晩のビルドプロセスに関連付けられているか覚えておかずに毎晩のビルドを簡単に参照できることです。

Example 37. 1つのチェンジリストでサブミットされたファイルセットに限定して参照します。

チェンジリスト1238によりバグが修正されており、その修正に関連付けられたファイルのみを参照するパッチラベルが必要です。アールはp4 label patch20111201と入力してラベルのRevision:フィールドを使用し、チェンジリスト1238でサブミットされたファイルだけを自動的にpatch20111201ラベルにタグ付けします。

Label:    patch20111201
Owner:    earl
Description:
     Patch to 2011/12/01 nightly build.
Options:     unlocked noautoreload
View:
     //depot/...
Revision:
     @1238,1238

この動的ラベルは、チェンジリスト1238でサブミットされたファイルのみを参照します。

Example 38. 複数のチェンジリストにある各ファイルの最初のリビジョンを参照します。

チェンジリスト指定子以外にリビジョン指定子を使用することができます。この例では、アールはブランチ内の各ファイルの最初のリビジョン(#1)を参照しています。ブランチの実装方法によっては、これらのファイルは長い時間をかけて複数のチェンジリストから作成された可能性があります。

Label:    first2.2
Owner:    earl
Description:
     The first revision in the 2.2 branch
Options:     unlocked noautoreload
View:
     //depot/release/jam/2.2/src/...
Revision:
     "#1"

Perforce のフォームにおいて、#文字はコメントを意味するものとして使用されるため、アールは#を引用符で囲むことで、これがリビジョン指定子として解析させるようにしました。

ファイルへの誤ったタグ付けおよびタグ付け解除を防ぐ

クライアントワークスペースおよびラベルビュー(設定されている場合)にあるファイルにタグ付けし、それ以外のファイルのタグ付けを解除するには、引数なしのp4 labelsyncコマンドを発行します。ファイルへの誤ったタグ付けおよびタグ付け解除を防ぐには、p4 label labelnameコマンドを発行して、ラベルフォームのOptions:フィールドをlockedに設定してラベルをロックします。他のユーザがラベルを変更できないようにするには、Owner:フィールドを設定します。Perforceの権限についての詳細情報は、『Perforceサーバ管理者ガイド: 基本』を参照してください。

エッジサーバでラベルを使用する

集中サーバおよびエッジサーバを使用して、分散、マルチサイト環境でPerforceサーバを使用することができます。分散型のPerforceサービスアーキテクチャでは、通常ユーザはエッジサーバに接続し、クラシックPerforceサービスで実行するときと同じようにコマンドを実行します。詳細については、『Perforceサーバ管理者ガイド: マルチサイト展開』を参照してください。

エッジサーバに接続すると、p4 labelコマンド、p4 labelsyncコマンド、およびp4 tagコマンドがエッジサーバのローカルのラベルに対して実行されます。グローバルラベルは、-gオプションを使用することで操作することができます。詳細については、『P4コマンドリファレンス』を参照してください。

Note

-gオプションをp4 labelsyncと使用できるのは、グローバルクライアントのみです。グローバルラベルを操作するには、p4 tagコマンドを使用します。