5

大規模な Perforce リポジトリを選択的にインポートする適切な方法は何ですか?

-//depot/main/ignoregit-p4 docs には、ディレクトリをフィルターするための切り替えを行うことができると記載されています。git filter-branchこれは、クローンの後に同じディレクトリを削除するためにa を実行することと同等でしょうか?

さらに、Perforce は「クライアント」ビューと呼ばれる別の機能を提供しているようです。私は以前に Perforce を使用したことがないため、使用モデルに少し慣れていません。私の現在の理解では、p4実行する前に何らかの方法で適切なクライアント ビューをセットアップするということgit p4 cloneです。誰かが完全な詳細を持っていますか?

4

1 に答える 1

6

Perforce clientspec は、Perforce リポジトリのどの部分が Perforce クライアントに表示されるか (および同期されるか) を決定します。clientspec は、Perforce リポジトリ パスからローカル パスへのマッピングも提供します。

Perforce リポジトリの一部を選択的に含めることで、Perforce クライアントをプルーニングできます。例えば

//depot/main/path1/... //your-perforce-client/main/path1/...
//depot/main/path2/... //your-perforce-client/main/path2/...

//depot/main/path1/and //depot/main/path2/and notのみが含まれます//depot/main/path3/。ご指摘のとおり、パスを明示的に除外することもできます。例えば

//depot/main/path1/... //your-perforce-client/main/path1/...
-//depot/main/path1/foo/... //your-perforce-client/main/path1/foo/...

サブディレクトリの下のファイル//depot/main/path1/ 以外のすべてが含まれますfoo

Perforce リポジトリがどのように構造化されているか、および何を含める (または除外する) かによってgit-p4、Perforce ツリーのどの部分をインポートするかを直接指定できる可能性があります。

git p4 clone --destination=/path/to/new/git/tree //depot/path1 //depot/path2

除外を使用する場合、または Perforce デポ パスをローカル パスにマップする方法を調整する場合は、オプションを追加する必要があり--use-client-specます。.p4configGit ツリーの親ディレクトリに以下を含むファイルを作成することで、どの Perforce クライアントを使用するかを構成できます。

P4CLIENT=YOUR_PERFORCE_CLIENT_NAME

次に、環境変数を設定します。

P4CONFIG=.p4config

これを行うと、現在のディレクトリで Perforce 構成データp4のファイルが検索され.p4configます (そして、親ディレクトリが徐々に検索されます)。

インポートされるファイルは、Perforce clientspec に含まれるパスと、コマンドラインで明示的に指定されたパスの交差点になります。git p4 clone

(あなたが述べたように、git-p4 cloneパスにプレフィックスを付けることでパスを除外できます-。ただし、これを行うことはお勧めしません。これは、これらのパスが最初のインポートでのみ除外されることを意味するためです。将来、そのパス内のファイルが Perforce で変更された場合、git p4 rebase/を実行git p4 syncすると、変更されたファイルが取得されます (コマンドラインで再度明示的に除外することを忘れない限り)。--use-client-specただし、 を使用して最初にインポートすると、フラグが設定され、将来/.git/configを使用するときに自動的に適用されるようになります。)git p4 rebasegit p4 sync


1 つの注意点は、いつか Perforce リポジトリの他の部分を含めたい場合に、選択的クローンを実行すると、さらに複雑になることです。それが必要な場合は、「初期クローン後の clientspec の拡張」に対する私の回答をgit-p4参照してください。

于 2015-05-16T19:08:21.927 に答える