157

有没有什么好的软件可以让我在我的 SVN 存储库中搜索代码片段?我找到了“FishEye”,但成本是 1,200,远远超出了我的预算。

4

14 回答 14

71

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

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

视窗:

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

否则结帐并进行文件系统搜索:

egrep -r _code_ .
于 2010-06-17T18:24:46.480 回答
37

sourceforge.net/projects/svn-search

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

于 2009-08-17T09:54:13.337 回答
12

2020 年 1 月更新

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

请参阅版本 4.2 发行说明,并从主下载页面下载 VisualSVN Server 4.2.0 。

在此处输入图像描述


旧答案

Subversion 1.8 开始,您可以将--searchoption 与svn logcommand一起使用。请注意,该命令不会在存储库中执行全文搜索,它仅考虑以下数据:

  • 修订的作者(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.
于 2013-12-05T10:15:17.300 回答
10

我们使用http://opensolaris.org/os/project/opengrok/

于 2008-10-31T19:00:10.423 回答
9

此示例将存储库的完整内容通过管道传输到文件,然后您可以在编辑器中快速搜索文件名:

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

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

于 2013-10-10T13:31:18.913 回答
9
  1. 创建git-svn该存储库的镜像。
  2. 在 git: 中搜索添加或删除的字符串,git log -S'my line of code'或者在gitk

优点是您可以在本地进行许多搜索,而无需加载服务器和网络连接。

于 2010-06-17T18:49:19.440 回答
4

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

于 2008-10-31T18:44:29.643 回答
4

请注意,FishEye(和许多其他 Atlassian 产品)有一个 10 美元的 Starter Edition,就 FishEye 而言,它为您提供 5 个存储库和最多 10 个提交者的访问权限。在这种情况下,这笔钱将用于慈善事业。

www.atlassian.com/starter

于 2010-07-08T13:09:22.127 回答
3

非常缓慢(并且粗略地实现),但是如果您正在搜索单个文件或小型存储库的历史记录,则 svn log 和 svn cat 的组合可以工作:

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

将输出文件更改的每个修订号和文件。您总是可以将每个修订版分类到不同的文件中,然后 grep 进行更改。

PS。向任何向我展示如何正确执行此操作的人进行大量投票!

于 2008-10-31T20:13:06.220 回答
2

如果您真的很绝望,请转储 repo(查看“svnadmin dump”),然后用 grep 遍历它。它不漂亮,但您可以查看搜索结果以找到指示文件和修订的元数据,然后检查它以获得更好的外观。

可以肯定,这不是一个好的解决方案,但它是免费的 :) SVN 不提供搜索过去签到(甚至过去的日志文件,AFAIK)的功能。

于 2008-10-31T19:16:49.190 回答
1

许多 SVN 存储库是“简单的”HTTP 站点,因此您可以考虑查看一些现成的“网络爬虫”搜索应用程序,您可以将其指向 SVN 根目录,它会为您提供基本功能。更新它可能会有点技巧,也许黑客中的一些 SVN 检查可以让索引在你去的时候丢弃或重新索引更改。

只是大声思考。

于 2008-10-31T17:31:10.180 回答
1

有 krugle 和 koders 但两者都很贵。两者都有 Eclipse 的 ide 插件。

于 2008-10-31T17:43:33.823 回答
1

我开始使用这个工具

http://www.supose.org/wiki/supose

它工作得很好,只是缺少一个可视化的 UI,但是速度很快并且有点维护

于 2010-10-29T13:53:41.537 回答
0

// 编辑:工具已经在另一个答案中提到,所以把所有的功劳都归功于 Kuryaki。

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

于 2011-06-28T16:58:55.930 回答