在SVN存储库中搜索文件名

82 svn search text base

我们有一个包含数千个文件夹和子文件夹的代码的批量存储库,我想在这个存储库下搜索文件名或一些单词.

Root folder
    a\
    b\
    c\
    d\
    e\
    f\ab\
    f\ab\cd.txt
Run Code Online (Sandbox Code Playgroud)

我想搜索cd.txt但不知道它在SVN存储库中的位置,因为我想在SVN的根文件夹上执行搜索,我将把文件名cd.txt和运行命令,将检入每个文件夹,将显示文件详细信息结果....

希望要求很明确.你能帮我解决这个问题吗?

lmo*_*mop 59

如果文件在您的工作副本中,那么如果您使用的是svn 1.5:

svn list --depth infinity | grep <filename>
Run Code Online (Sandbox Code Playgroud)

或者是svn的早期版本:

find . -name <filename> -not -path '*.svn*'
Run Code Online (Sandbox Code Playgroud)

如果您需要在历史记录中找到该文件(已删除或已移动):

svn log -v | less
Run Code Online (Sandbox Code Playgroud)

并搜索它:

\<filename><return>
Run Code Online (Sandbox Code Playgroud)

  • 如果文件在我的工作副本中,我不需要svn来查找它.您应该添加如何搜索像Anton和Marios答案的回购.也许这对你来说是显而易见的,但正是他们的答案才让我变得简单. (7认同)
  • 在Windows PowerShell中,您可以使用`... | select-string <filename>`作为`grep`的替代. (4认同)
  • svn list --depth infinity运行良好,在Windows中你当然不会默认grep,我只是将它转储到一个文本文件中并用文本编辑器搜索它: (3认同)
  • 在常规的Windows命令行中`... | find"<filename>"`也可以作为grep的替代品.**注意**:"文件名需要". (2认同)

Mar*_*s V 57

以下适用于我(svn版本1.4.6)

svn list -R <URL> | grep "<file_pattern>"
Run Code Online (Sandbox Code Playgroud)

  • 大.这适用于乌龟.在windows中:svn list -R myurl >> results.txt (5认同)

Rob*_*les 17

通过访问repo本身使用(即在你的svn主机文件系统上)

svnlook tree [path_to_repo] | grep [file_name]  
Run Code Online (Sandbox Code Playgroud)

或搜索所有回购(如果您有多个回购设置).

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 
Run Code Online (Sandbox Code Playgroud)

选项--full-paths将在repo中提供文件的完整路径(如果找到)

例:

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
Run Code Online (Sandbox Code Playgroud)

如果需要静态副本,则将输出重定向到文件.
假设使用nix OS.

  • +1使用"svnlook tree --full-paths <path_to_repo> | grep <filename>".这是我发现在subversion repo中进行文件搜索的最快方法. (3认同)

Ant*_*lev 12

svn list --depth infinity <your-repo-here>获取repo中的文件列表,然后svn cat获取内容.您可以--xmllist命令添加键以使解析更简单一些.


Dmi*_*nko 6

最近我发布了我的实用程序来列出存储库,这比"svn ls --depth infinity"方法要快得多.这是基准.它只调用Subversion内部API中可用的函数,但现在可以通过命令行访问.

所以你可以跑

$ svn-crawler <URL> | grep "<file_pattern>"
Run Code Online (Sandbox Code Playgroud)