SVNリポジトリでファイル名を検索します


84

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

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

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

要件が明確であることを願っています。これについて私を助けてくれませんか。


サーバー側で検索を実行する、入力できるクライアント側のコマンドがあることを期待していました。私が使用しているこのSVNリポジトリは、VPNを介した応答時間と転送速度がひどいものです。残念ながら、それは不可能のようです。
Patrick M

回答:


60

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

svn list --depth infinity | grep <filename>

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

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

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

svn log -v | less

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

\<filename><return>

3
無限--depth SVNリストがうまく機能し、デフォルトではgrep持って文句を言わないもちろんの窓に、私はテキストファイルにダンプし、テキストエディタでそのを通じて検索:
Mandrakeの

4
Windows PowerShellでは... | select-string <filename>、の代わりに使用できますgrep
MarnixKlooster ReinstateMonica 2012

2
通常のWindowsでは、コマンドライン... | find "<filename>"はgrepの代わりとしても機能します。 NOTE:「ファイル名を囲む必要があります。
レイストーム

7
ファイルが作業コピーにある場合、それを見つけるためにsvnは必要ありません。アントンやマリオスの回答のようにレポを検索する方法を追加する必要があります。おそらくそれはあなたには明らかですが、単純な古い私のために光を当てたのは彼らの答えでした。
Lieven Keersmaekers 2013年

1
あなたのことができsvn co --depth empty REPOURL RepoDircd RepoDirそしてsvn list --depth infinity、その後、SVNサーバからのすべてのファイル・パスは、(あなたは何百万を持っている場合は、おそらく何百万行を生成する)を取得。
Ivan Akcheurov 2015年

58

以下は私のために働きます(svnバージョン1.4.6)

svn list -R <URL> | grep "<file_pattern>"

6
すごい。これはTortoiseで機能します。Windowsの場合:svn list -R myurl >> results.txt
live-love

本当にうまくいきます。また、「-depthinfinity」よりも「-R」だけを覚える方がはるかに簡単です。
MPV 2013

大規模なリポジトリの場合は低速で、以下のsvn-crawlerを使用することをお勧めします。
karsten 2018

17

リポジトリ自体にアクセスして使用する(つまり、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

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


3
「svnlooktree--full-paths <path_to_repo> | grep <filename>」を使用する場合は+1。これは、Subversionリポジトリでファイル検索を行うために私が見つけた最速の方法です。
ニックグリーリー2013

非常に高速な検索、非常に便利です。
ダスティンクック

12

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


grep1つのファイルを表示する場合、特にOPのようにリポジトリに数千のファイルがある場合は、必ず使用してください。また、--incremental出力を後の/前のXML出力と結合する必要がある場合のモードがあります。
トリシス2016年

6

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

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

$ svn-crawler <URL> | grep "<file_pattern>"

素敵なツール。CentOS7でテストしました。libsvn_deltaとlibsvn_subrをCMakeLists.txtのtarget_link_librariesリストに追加し、LIBAPR_LIBRARY_INCLUDEを「include /apr-1.0」から「include / apr-1」に適合させる必要がありました。
karsten 2018

4

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

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


-2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.