5

これが可能かどうかはわかりませんが、誰かが知っているかどうかを確認するように頼むと思いました。Perforceリポジトリで文字列を含むファイルを見つけることは可能ですか?具体的には、最初にリポジトリ全体をローカルディレクトリに同期せずに同期することは可能ですか?(それはかなり大きいです-私がたくさんのものを削除したとしても私には余裕がないと思います-それはとにかくアーカイブサーバーのためのものです。)

ローカルディレクトリ内のファイルを検索できるツールはいくつもありますが(私は個人的にAgent Ransackを使用していますが、これはそのうちの1つにすぎません) 、リモートのPERFORCEディレクトリを検索することはできません。それがこの機能を持っていること、またはおそらくPERFORCE自体の中に隠された機能があることに気づいていませんか?

4

4 に答える 4

12

p4 grepあなたの友だちです。perforceブログから

「p4grep」を使用すると、ユーザーは単純なファイル検索と正規表現を使用して、サーバーに保存されているファイルの以前のリビジョンだけでなく、ヘッドのファイルコンテンツを検索できます。標準のgrepのすべてのオプションがサポートされているわけではありませんが、最も重要なオプションが利用可能です。'p4helpgrep'に従ったコマンドの構文は次のとおりです。

p4 grep [ -a -i -n -v -A after -B before -C context -l -L -t -s -F -G ] -e pattern file[revRange]...

マニュアルページも参照してください。

更新: Perforceが1つのp4 grepコマンドで検索するファイルの数には制限があることに注意してください。おそらくこれは、サーバーの負荷を抑えるのに役立つためです。これはエラーとして現れます:

Grep revision limit exceeded (over 10000).

十分なPERFORCE権限がある場合は、これを使用して、設定をこのデフォルトの10Kからより大きな値p4 configureに増やすことができます。dm.grep.maxrevsたとえば、100万に設定するには:

p4 configure set dm.grep.maxrevs=1M

これを変更する権限がない場合はp4 grep、サブディレクトリ上でアップを複数のコマンドに分割することで回避できます。デポの構造によっては、サブディレクトリなどにさらに分割する必要がある場合があります。

たとえば、このコマンドをbashシェルで使用して、一度に//depot/trunk1つのサブディレクトリを検索できます。p4 dirsコマンドを使用して、サーバーからサブディレクトリのリストを取得します。

for dir in $(p4 dirs //depot/trunk/*); do
  p4 grep -s -i -e the_search_string $dir/...
done
于 2012-12-03T23:56:35.360 に答える
2

実際、これは自分で解決しました。 p4 grep確かにトリックを行います。 ここにドキュメント。正しく機能するようにするには、慎重に絞り込む必要があります。サーバーでは、少なくとも10000ファイル未満に絞り込む必要があります。また、コンソールで出力を印刷するのではなく、ファイルにリダイレクトする必要がありました。コンソールで> output.txtは1行あたり4096文字の制限があり、ファイルパスが非常に長いためです。

于 2012-12-03T23:59:43.600 に答える
1

これは、標準のPERFORCEツールでできることではありません。役立つコマンドの1つかもしれませんp4 printが、同期よりも実際には高速ではありません。

于 2012-12-03T23:40:39.473 に答える
0

これは大きな問題ですが、サーバーにアクセスできる場合は、PERFORCEディレクトリでエージェントransackを実行できます。PERFORCEは、バージョン管理されたすべてのファイルをディスクに保存します。データベースにあるのはメタデータだけです。

于 2012-12-03T23:53:09.133 に答える