在 SVN 存储库中搜索文件名

Posted

技术标签:

【中文标题】在 SVN 存储库中搜索文件名【英文标题】:Search in SVN repository for a file name 【发布时间】:2010-10-16 20:03:23 【问题描述】:

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

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

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

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

【问题讨论】:

我希望您可以输入一个客户端命令来执行搜索服务器端。我正在使用的这个 SVN 存储库在 *** 上的响应时间和传输速率都很糟糕。唉,这似乎是不可能的。 【参考方案1】:

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

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

【讨论】:

太棒了。这适用于乌龟。在 Windows 中:svn list -R myurl >> results.txt 效果很好。也比“--depth infinity”更容易记住“-R”。 大型仓库的速度较慢,最好使用下面的 svn-crawler。【参考方案2】:

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

svn list --depth infinity | grep <filename>

或更早版本的svn:

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

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

svn log -v | less

然后搜索它:

\<filename><return>

【讨论】:

svn list --depth infinity 效果很好,在 Windows 中你当然不会有 grep 默认情况下,我只是将它转储到一个文本文件中并使用文本编辑器搜索: 在 Windows PowerShell 中,您可以使用 ... | select-string &lt;filename&gt; 代替 grep 在常规的 Windows 命令行中,... | find "&lt;filename&gt;" 也可以替代 grep。 注意:文件名周围需要 "。 如果文件在我的工作副本中,我不需要 svn 来找到它。您应该添加如何像 Anton 和 Marios 的答案那样搜索 repo。也许这对你来说很明显,但正是他们的回答为简单的老我打开了灯。 你可以svn co --depth empty REPOURL RepoDircd RepoDirsvn list --depth infinity然后从SVN服务器获取所有文件路径(如果你有百万行,可能会产生百万行)。【参考方案3】:

通过访问 repo 本身使用(即在您的 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 将在 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

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

【讨论】:

+1 用于使用“svnlook tree --full-paths | grep ”。这是我发现在 subversion repo 中进行文件搜索的最快方法。 闪电般的快速搜索,非常好用。【参考方案4】:

svn list --depth infinity &lt;your-repo-here&gt; 获取 repo 中的文件列表,然后svn cat 获取内容。您可以将--xml 键添加到list 命令以使解析更简单。

【讨论】:

如果您想查看 1 个文件,请记住使用 grep,尤其是当您在存储库中拥有数千个文件(如 OP)时。此外,如果您需要将输出与较晚/较早的 XML 输出连接,还有--incremental 模式。【参考方案5】:

最近我发布了我的utility 来列出存储库,这比“svn ls --depth infinity”方法快得多。这是benchmarks。它只是调用 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”。【参考方案6】:

如果您使用的是 TortoiseSVN,如果您愿意逐个项目地查看项目,则可以试试这个 - 对我有用:

    在您的存储库*** URL 下创建一个空白项目,将其命名为 BLANK 单击左侧窗格中的 Repo URL 在右侧窗格中选择您的 BLANK 项目和您想要的项目 - 比如说树干 右键单击以弹出浏览器菜单并选择“比较 URL”,根据您的存储库的大小,加载可能需要一分钟。但是您基本上可以将整个项目列表放在“准备搜索”列表中。 在搜索过滤器中输入您的文件名或其他字符串

【讨论】:

【参考方案7】:

VisualSVN Server 4.2 支持在 Web 界面中按名称查找文件。在demo server 上试用新功能。

您可以在https://www.visualsvn.com/server/download/pre-release/ 下载 VisualSVN Server 4.2.0。请参阅https://www.visualsvn.com/server/download/ 的发行说明。

【讨论】:

【参考方案8】:

如果您的远程存储库不是很大,那么一个简单的方法是: 您可以进行“签出”以获取本地存储库。如果您在 windows 机器上使用“搜索”或 Linux 机器使用“查找”命令。

【讨论】:

以上是关于在 SVN 存储库中搜索文件名的主要内容,如果未能解决你的问题,请参考以下文章

从 SVN 存储库中删除文件而不删除本地副本

如何列出远程 SVN 存储库中的所有文件?

使用Git SVN删除SVN存储库中的空文件夹

忽略Git存储库中SVN中的文件

当我在存储库中丢失一些修订时,如何转储所有 svn 数据?

Xcode build 文件夹出现在 svn