ストリームビューについて

ストリームに含まれるファイルを構成するには、ストリームビューを定義します。ビューはパス集合で構成されますが、ユーザーがそれに割り当てるパスタイプによってパスの動作が制御されます。Perforceはストリームビューを使用してワークスペースビューとブランチビューを生成します。

ストリームパスのタイプ

ストリームビューは以下のパスタイプを使用します。

  • share:shareパス内のファイルは同期(取得)、サブミット、反映(ブランチ、マージ、コピー)できます。shareパスは変更が他のストリームから流入するか他のストリームに流出するファイルに使用されます。

  • isolate:ファイルは編集可能ですが、生じた変更を他のストリームに反映することはできません。isolateパスは夜間ビルドやその他の生成ファイル(binディレクトリなど)を保存する場合に役立ちます。

  • import:ファイルは指定した場所から供給され、同期できますが、サブミットまたは反映することはできません。importパスはサードパーティ製ライブラリなどのコンポーネントに使用します。ビルドに必要ですが、編集することはできません。ディポの場所が明示的に定義されていない場合、importパスのビューは親ストリームから継承されます。インポートされたファイルやフォルダは、インポート元の親ストリームでハロー アイコンが付けられます。

  • import+:importパスと同じように機能します。明示的に定義されたディポパスを参照できますが、標準のimportパスと異なり、import+パス内のファイルには変更をサブミットできます

  • exclude:親ファイルから継承されたファイルをストリームから除外します。excludeパス内のファイルを同期、サブミット、反映することはできません。

以下の表は各パスタイプの動作をわかりやすく示しています。

パスタイプ マージ/コピー ブランチ 同期 サブミット
share Y Y Y Y
isolate N N Y Y
import N N Y N
import+ N N Y Y
exclude N N N N

ストリームパスの構文

ストリームパスを指定する構文は、Perforceディポパス構文の先頭にある//depot名とストリーム名を削除したものに似ています。例:

ディポパス: //Ace/main/qa/...

ストリームビューパス: qa/...

ストリームのマージ、コピー、ブランチ、およびqaへの編集のサブミットを実行する場合は、ストリームビューで以下のようにshareパスを含めます。

share qa/... 

注意

ストリームビューではワイルドカード(*)、位置指定子(%%1)、オーバーレイマッピング(+)は使用できません。

親子間の継承

子ストリームはフォルダパスと動作ルールを親から継承します。親子間の継承について理解するには、以下の用語が役立ちます。

  • 寛容性: パス上でどのような操作(サブミット、同期など)を許可するか

    パスタイプは親ストリームから継承されます。親ストリームから割り当てられたパスタイプの設定を上書きすることはできません。つまり、子ストリームの寛容性は常に親ストリーム以下になり、上回ることはありません。たとえば、親ストリームでパスがisolateとして定義されている場合、その子ストリームでパスをshareと再定義し、反映を有効にすることはできません。

  • 包括性: ストリームにどのパスを含めるか

    定義により、子の包括性を親より高くすることはできません。親に含まれていないフォルダパスを子に含めることはできません。つまり、isolateパス内のフォルダが親に含まれていない場合、このパスを子に追加することはできません。以下の例では、Devストリームが正しく定義されていません。このストリームはMainの子で、isolateパスを含んでいますが、このパスは正しく動作しません。親に含まれていないフォルダが含まれているためです。Devストリームでconfig/フォルダを隔離するには、このフォルダをshareとして含めるか、Mainisolateパスに含める必要があります。

    正しくない例                        正しい例
    Stream: //Acme/Main              Stream: //Acme/Main
    Parent: none                     Parent: none
    Paths:  share apps/...           Paths:  share apps/...
            share tests/...                  share tests/...
                                             share config/...
    
    Stream: //Acme/Dev               Stream: //Acme/Dev
    Parent: //Acme/Main              Parent: //Acme/Main
    Paths:  share apps/...           Paths:  share apps/...
            share tests/...                  share tests/...
            isolate config/...               isolate config/...

共有

2つのストリーム//Ace/mainおよびその子//Ace/devを使用した単純な例を示します。

Stream: //Ace/main
Parent: none
Paths: share ...

Stream: //Ace/dev
Parent: //Ace/main
Paths: share ...

この場合、ストリームパス全体が共有されています。ワークスペースを//Ace/mainストリームに切り替えると、ワークスペースビューは以下のようになります。

//Ace/main/... //your_ws/...

ワークスペースビューは//Ace/mainストリームのルートをワークスペースにマップします。ワークスペースを//Ace/devストリームに切り替えると、ワークスペースビューは以下のようになります。

//Ace/dev/... //your_ws/...

//Ace/dev/のブランチビューは以下のようになります。

//Ace/dev/... //Ace/main/...

つまり、devストリーム全体をワークスペースに同期でき、ストリーム全体をブランチ、マージ、コピーできます。

共有とインポート

ソフトウェアコンポーネントが3つの異なるディポ//Acme//Red//Tangoに保存されている場合について示します。

Acmeメインラインは以下のように構成されています。

Stream: //Acme/Main
Parent: none
Paths:  share apps/...
        share tests/...
        import stuff/... //Red/R6.1/stuff/...
        import tools/... //Tango/tools/...

ワークスペースを//Acme/Mainストリームに切り替えると、ワークスペースビューは以下のようになります。

//Acme/Main/apps/... //your_ws/apps/...
//Acme/Main/tests/... //your_ws/tests/...
//Red/R6.1/stuff/... //your_ws/stuff/...
//Tango/tools/... //your_ws/tools/...

ストリームの[パス]フィールドに、ストリームのルートに関連するフォルダが一覧表示されます。これらのフォルダがワークスペースのワークスペースルート下に取得されます。共有フォルダは//Acme/Mainパスにマップされ、importパスは//Redおよび//Tangoディポ内のそれぞれの場所にマップされます。

共有、隔離、除外、インポート

メインラインで実際の開発を行いたくない場合について示します。XProd機能チームでは自身の開発ストリームを以下のように定義しています。

Stream: //Acme/XProd
Parent: //Acme/Main
Paths:  import ...
        isolate apps/bin/...
        share apps/xp/...
        exclude tests/...

ワークスペースを//Acme/XProdストリームに切り替えると、以下のように表示されます。

//Acme/Main/apps/... //your_ws/apps/...
//Acme/XProd/apps/bin/... //your_ws/apps/bin/...
//Acme/XProd/apps/xp/... //your_ws/apps/xp/...
//Red/R6.1/stuff/... //your_ws/stuff/...
//Tango/tools/... //your_ws/tools/...
-//Acme/XProd/tests/... //your_ws/tests/... 

ここでは作業中のストリームビューが継承されています。importパスは親のクライアントビューでマップされている場所にマップされます。shareおよびisolateパスは子ストリームにマップされます。これらのパスには、XProdチームが使用していて、変更のサブミット先となるファイルが含まれています。excludeパス(ビューではマイナス記号が付きます)はワークスペースに表示されません。

//Acme/XProdストリームには親が存在するため、copyおよびmergeコマンドで使用できるブランチマッピングが存在します。以下のように、ブランチビューは子および親によって共有されている単一のパスで構成されています(ストリームのブランチビューを表示するにはPerforce Command Line Client (P4)を使用する必要があります)。

-//Acme/XProd/apps/... //Acme/Main/apps/...
-//Acme/XProd/apps/bin/... //Acme/Main/apps/bin/...
//Acme/XProd/apps/xp/... //Acme/Main/apps/xp/...
-//Acme/XProd/stuff/... //Acme/Main/stuff/...
-//Acme/XProd/tests/... //Acme/Main/tests/...
-//Acme/XProd/tools/... //Acme/Main/tools/...

//Acme/XProdワークスペースで作業する際、//Acme/Mainの完全なブランチ内で作業しているように感じますが、実際のブランチは非常に小さいものになります。

上位すべての親を子が共有する

Bobが//Acme/XProdから子ストリームを作成するとします。彼のストリーム指定は以下のようになります。

Stream: //Acme/BobDev
Parent: //Acme/XProd
Paths:  share ...

Bobのストリームにはデフォルトのビューテンプレートが存在します。Bobのストリームパス全体が"share"に設定されている場合、彼のワークスペース全体が彼のストリームにマップされると想定するかもしれません。そうではありません。継承された動作が常に優先されるためです。共有は親においても共有されているパスにのみ適用されます。Bobのストリームのワークスペースでは、デフォルトのビューテンプレートを使用した場合、以下のクライアントビューが表示されます。

//Acme/Main/apps/... //your_ws/apps/...
-//Acme/BobDev/tests/... //your_ws/tests/...
//Acme/BobDev/apps/bin/... //your_ws/apps/bin/...
//Acme/BobDev/apps/xp/... //your_ws/apps/xp/...
//Red/R6.1/stuff/... //your_ws/stuff/...
//Tango/tools/... //your_ws/tools/...

BobのストリームのワークスペースはXProdストリームのワークスペースと同じになります。唯一異なるのは、サブミットに使用できるパスが//Acme/BobDevになることです。これは理にかなっています。Bobのストリームで作業する場合、変更は彼のストリームにサブミットされるためです。

一方、//Acme/BobDevストリームをその親にマップするブランチビューでは、両方のストリームで共有するように指定されているパスのみがマップされます。

-//Acme/Main/apps/... //XProd/apps/...
-//Acme/BobDev/tests/... //XProd/tests/...
-//Acme/BobDev/apps/bin/... //XProd/apps/bin/...
//Acme/BobDev/apps/xp/... //your_ws/apps/xp/...
-//Red/R6.1/stuff/... //XProd/stuff/...
-//Tango/tools/... //XProd/tools/...

デフォルトのテンプレートを使用すると、Bobは彼のチームが使用しているパスの彼自身のバージョンをブランチし、ブランチされていないファイルについては親ストリームと同じビューを持つワークスペースを使用できます。

ファイルを再マッピングする

ファイルは再マッピングできます。これにより、ディポの場所と異なるワークスペースの場所にファイルを配置できます。たとえば、以下のビューは、親のdocsファイルを、このストリームに定義されているワークスペース内のdoctoolsパスに配置するように指定しています。

再マッピング:

Remapped: 
docs/... doctools/docs/...

ファイルを無視する

無視するファイルタイプを指定することができます。オブジェクトファイル、その他の中間ファイルなどのアーティファクトが、チェックインまたは反映されないようにする場合に役立ちます。これらのタイプは、ストリームに関連付けられているワークスペースのワークスペースビューから除外されます。例:

Ignored:
.swp
.o
/tmp/...