86

何千ものフォルダーとサブフォルダーを含むコード用のバルクリポジトリがあります。このリポジトリの下でファイル名または単語を使用して検索したいと思います。

Root folder
    a\
    b\
    c\
    d\
    e\
    f\ab\
    f\ab\cd.txt

cd.txt を検索したいのですが、SVN リポジトリのどこにあるのかわかりません。SVN のルート フォルダで検索を実行したいので、ファイル名 cd.txt を入力してコマンドを実行し、チェックインします。各フォルダとファイルの詳細結果が表示されます....

希望条件は明確です。これについて私を助けてくれませんか。

4

9 に答える 9

62

以下は私にとってはうまくいきます(svnバージョン1.4.6)

svn list -R <URL> | grep "<file_pattern>"
于 2011-09-20T12:08:19.570 に答える
60

ファイルが作業コピーにある場合、svn 1.5 を使用している場合:

svn list --depth infinity | grep <filename>

または以前のバージョンの svn:

find . -name <filename> -not -path '*.svn*'

履歴でファイルを見つける必要がある場合 (削除または移動):

svn log -v | less

そしてそれを検索します:

\<filename><return>
于 2009-04-01T10:30:28.337 に答える
18

レポ自体にアクセスして使用します(つまり、svnホストファイルシステムで)

svnlook tree [path_to_repo] | grep [file_name]  

または、すべてのリポジトリを検索します (複数のリポジトリがセットアップされている場合)。

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

オプション --full-paths は、レポ内のファイルへのフルパスを提供します(見つかった場合)

例:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done

静的コピーが必要な場合は、出力をファイルにリダイレクトします。
nix OS の使用を前提としています。

于 2013-09-02T13:35:42.930 に答える
12

svn list --depth infinity <your-repo-here>リポジトリ内のファイルのリストを取得してsvn catから、コンテンツを取得します。--xmlコマンドにキーを追加listして、解析を少し簡単にすることができます。

于 2009-04-01T10:24:13.470 に答える
6

最近、リポジトリを一覧表示するユーティリティを公開しました。これは、「svnls--depthinfinity」アプローチよりもはるかに高速です。これがベンチマークです。Subversion内部APIで使用できる関数を呼び出すだけですが、コマンドラインからアクセスできるようになりました。

だからあなたは走ることができます

$ svn-crawler <URL> | grep "<file_pattern>"
于 2013-03-18T13:55:04.797 に答える
4

TortoiseSVNを使用している場合は、プロジェクトごとに見てみたい場合は、これを試すことができます。

  1. リポジトリのトップレベルURLの下に空白のプロジェクトを作成し、BLANKと呼びます
  2. 左側のペインのリポジトリURLをクリックします
  3. 右側のペインで、空白のプロジェクトと目的のプロジェクトを選択します-トランクと言います
  4. 右クリックしてブラウザメニューをポップアップし、[URLの比較]を選択します。リポジトリのサイズによっては、読み込みに1分かかる場合があります。ただし、基本的には、プロジェクトリスト全体を「すぐに検索できる」リストに入れます。
  5. 検索フィルターにファイル名またはその他の文字列を入力します
于 2012-11-15T21:54:49.747 に答える
0

などの検索結果をフィルター処理するために追加のツールを使用することをお勧めしますsvn+grep。このようなツールは、Windowsgrepsvn-crawlerその他の OS では利用できない/動作しない可能性があるため、インストール/アップグレードする必要があります。

globパターン--searchをサポートするフラグを指定して 1 つの svn コマンドを使用して、このタスクを解決できます。

> svn ls -R --search "readme.md"
branches/0.13.x/readme.md
trunk/readme.md

> svn ls -R --search "*.md"
branches/0.13.x/189.md
branches/0.13.x/readme.md
trunk/189.md
trunk/readme.md

svn ls --searchオプションの詳細:

> svn ls -h                                
list (ls): List directory entries in the repository.
usage: list [TARGET[@REV]...]

  List each TARGET file and the contents of each TARGET directory as
  they exist in the repository.  If TARGET is a working copy path, the
  corresponding repository URL will be used. If specified, REV determines
  in which revision the target is first looked up.

...

Valid options:
  ...
  --search ARG             : use ARG as search pattern (glob syntax, case-
                             and accent-insensitive, may require quotation marks
                             to prevent shell expansion)
于 2022-02-02T04:08:48.163 に答える
-2

リモート リポジトリが大きくない場合、簡単な方法は次のとおりです。「チェックアウト」を実行して、ローカル リポジトリを取得できます。Windows マシンの場合は「検索」を使用し、Linux マシンの場合は「検索」コマンドを使用します。

于 2016-03-02T07:10:31.540 に答える