在 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 <filename>
代替 grep
。
在常规的 Windows 命令行中,... | find "<filename>"
也可以替代 grep。 注意:文件名周围需要 "。
如果文件在我的工作副本中,我不需要 svn 来找到它。您应该添加如何像 Anton 和 Marios 的答案那样搜索 repo。也许这对你来说很明显,但正是他们的回答为简单的老我打开了灯。
你可以svn co --depth empty REPOURL RepoDir
、cd RepoDir
和svn 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-pathssvn list --depth infinity <your-repo-here>
获取 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 存储库中搜索文件名的主要内容,如果未能解决你的问题,请参考以下文章