存储库搜索

有没有什么好的软件可以让我在 SVN 资源库中搜索代码片段?我找到了“鱼眼”,但它的价格是1200英镑,远远超出了我的预算。

140920 次浏览

许多 SVN 回购是“简单的”HTTP 站点,所以你可以考虑看看一些现成的“网络爬行”搜索应用,你可以指向 SVN 根,它会给你基本的功能。更新它可能是一个小技巧,也许一些 SVN 签入 Hackery 可以让索引在您更改时丢弃或重新索引更改。

只是在自言自语。

有 krugle 和 koders,但都很贵。都有 ide 插件用于 Eclipse。

我喜欢 TRAC-这个插件可能有助于你的任务: http://trac-hacks.org/wiki/RepoSearchPlugin

如果你真的很绝望,做一个回购转储(看看“ svnadmin 转储”) ,然后通过它。这并不好看,但是您可以查看搜索结果以找到指示文件和修订的元数据,然后检查它以获得更好的外观。

当然,这不是一个好的解决方案,但它是免费的:) SVN 没有提供搜索过去的签入(甚至过去的日志文件,AFAIK)的特性。

如果您正在搜索单个文件或小型存储库的历史记录,那么 svn log 和 svn cat 的组合将非常缓慢(并且实现非常粗糙) :

svn log filetosearch |
grep '^r' |
cut -f1 -d' ' |
xargs -i bash -c "echo '{}'; svn cat filetosearch -'{}'"

将输出每个修订号文件修改和文件。您总是可以将每个修订添加到不同的文件中,然后通过 grep 获取更改。

附注: 大量的赞扬给任何人,告诉我如何正确地做到这一点!

Sourceforge.net/projects/svn-search

还有一个 Windows 应用程序直接来自 SVN 主页,称为 SvnQuery,可在 http://svnquery.tigris.org上使用

如果只搜索文件名,请使用:

svn list -R file:///subversion/repository | grep filename

视窗:

svn list -R file:///subversion/repository | findstr filename

否则,签出并执行文件系统搜索:

egrep -r _code_ .
  1. 创建该存储库的 git-svn镜像。
  2. 搜索 git 中添加或删除的字符串: git log -S'my line of code'gitk中的相同字符串

这样做的好处是,您可以在本地进行许多搜索,而无需加载服务器和网络连接。

注意,< strong > FishEye (和许多其他 Atlassian 产品)有一个价值10美元的初学者版本,在 FishEye 的例子中,它为您提供了5个存储库和最多10个提交者的访问权限。 这笔钱是捐给慈善机构的。

Www.atlassian.com/starter

我开始用这个工具

Http://www.supose.org/wiki/supose

它只是在缺乏可视化 UI 的情况下工作得很好,但是速度很快,并且有所维护

//编辑: 工具已经在另一个答案中提到,所以把所有的学分给 Kuryaki。

刚刚发现的 假设是一个基于 Java 的命令行工具,它扫描存储库创建一个索引,然后能够回答某些类型的查询。我们还在评估这个工具,但看起来很有希望。值得一提的是,它提供了所有修订的完整索引,包括源代码文件和常见的办公室格式。

这个示例将存储库的完整内容传送到一个文件,然后您可以在编辑器中快速搜索文件名:

svn list -R svn://svn > filelist.txt

如果存储库是相对静态的,并且您希望进行快速搜索,而不必重复从 SVN 服务器加载所有内容,那么这种方法非常有用。

更新于2022年4月

VisualSVN Server 5.0通过内容和历史记录支持 全文存储库搜索全文存储库搜索

更新于2020年1月

VisualSVN Server 4.2支持在 Web 界面中查找文件和文件夹。尝试在 演示服务器的存储库的新功能之一!

查看 4.2版本发行说明,并从 主要下载页面下载 VisualSVNServer 4.2.0。

enter image description here


旧答案

Subversion 1.8,可以在 ABC1命令中使用 --search选项开始。注意,该命令不在存储库中执行全文搜索,它只考虑以下数据:

  • 版本的作者(svn:author未版本化的属性) ,
  • 日期(svn:date未版本化的属性) ,
  • 日志消息文本(svn:log未版本化属性) ,
  • 更改的路径列表(即受特定修订影响的路径)。

下面是关于这些新搜索选项的帮助页面:

 If the --search option is used, log messages are displayed only if the
provided search pattern matches any of the author, date, log message
text (unless --quiet is used), or, if the --verbose option is also
provided, a changed path.
The search pattern may include "glob syntax" wildcards:
?      matches any single character
*      matches a sequence of arbitrary characters
[abc]  matches any of the characters listed inside the brackets
If multiple --search options are provided, a log message is shown if
it matches any of the provided search patterns. If the --search-and
option is used, that option's argument is combined with the pattern
from the previous --search or --search-and option, and a log message
is shown only if it matches the combined search pattern.
If --limit is used in combination with --search, --limit restricts the
number of log messages searched, rather than restricting the output
to a particular number of matching log messages.