在SVN信息库中搜索文件名


84

我们有一个大容量的代码存储库,其中包含数千个文件夹和子文件夹,我想在此存储库下使用文件名或某些单词进行搜索。

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

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

希望条件很明确。你能帮我这个忙吗?


我希望可以输入一个客户端命令来执行搜索服务器端。我正在使用的此SVN存储库在VPN上的响应时间和传输速率非常糟糕。las,这似乎是不可能的。
Patrick M

Answers:


60

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

svn list --depth infinity | grep <filename>

或更早版本的svn:

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

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

svn log -v | less

并使用以下命令进行搜索:

\<filename><return>

3
svn list --depth infinity效果很好,默认情况下在Windows中您不会使用grep,我只是将其转储到文本文件中并使用文本编辑器进行搜索:
Mandrake

4
在Windows PowerShell中,您可以... | select-string <filename>代替grep
MarnixKlooster恢复状态莫妮卡2012年

2
在常规Windows命令行中,它... | find "<filename>"也可以代替grep。 注意:文件名周围必须包含“。”
Raystorm

7
如果文件在我的工作副本中,则不需要svn来找到它。您应该添加如何像Anton's和Marios答案一样搜索仓库。也许这对您来说很明显,但是正是他们的回答使老一辈老兄们望而却步。
Lieven Keersmaekers

1
你可以svn co --depth empty REPOURL RepoDircd RepoDir并且svn list --depth infinity然后得到SVN服务器中的所有文件路径(可能产生数以百万计的行,如果你有几百万)。
伊万·阿克谢罗夫

58

以下对我有用(svn版本1.4.6)

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

6
大。这适用于乌龟。在Windows中:svn列表-R myurl >> results.txt
live-love

真的很好。记住“ -R”比记住“ --depth infinity”要容易得多。
MPV

对于大型存储库,速度较慢,则最好在下面使用svn-crawler。
karsten

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

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


3
+1用于使用“ svnlook树--full-paths <path_to_repo> | grep <文件名>”。这是我发现的在Subversion版本库中进行文件搜索的最快方法。
Nick Grealy 2013年

闪电般的快速搜索,非常有用。
达斯汀·库克

12

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


grep如果要查看1个文件,请记住使用,尤其是在存储库(如OP)中有成千上万个文件的情况下。另外,--incremental如果您需要将输出与以后的XML输出结合在一起,则有一种模式。
trysis

6

最近,我发布了实用程序来列出存储库,这比“ svn ls --depth infinity”方法要快得多。这是基准。它只是调用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

4

如果您使用的是TortoiseSVN,则可以尝试以下方法:如果您愿意按项目查找项目-对我有用:

  1. 在存储库顶级URL下创建一个空白项目,命名为BLANK
  2. 单击左侧窗格上的回购URL
  3. 在右侧窗格中,选择您的BLANK项目和所需的项目-说“ trunk”
  4. 右键单击以弹出浏览器菜单,然后选择“比较URL”,具体取决于存储库的大小,可能需要一分钟的时间来加载。但是,您基本上可以将整个项目列表放在“准备搜索”列表中。
  5. 在搜索过滤器中输入文件名或其他字符串


-2

如果您的远程存储库不是很大,那么一个简单的方法是:您可以执行“签出”以获取本地存储库。如果您在Windows计算机中,则使用“搜索”,而Linux计算机则使用“查找”命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.