ストリームビューについて
ストリームに含まれるファイルを構成するには、ストリームビューを定義します。ビューはパス集合で構成されますが、ユーザーがそれに割り当てるパスタイプによってパスの動作が制御されます。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
として含めるか、Main
のisolate
パスに含める必要があります。正しくない例 正しい例 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/...