SVN代码库搜索

158

有没有好的软件可以让我搜索我的SVN代码片段?我找到了“FishEye”,但是它的价格为1,200美元,远超出我的预算。


6
需要搜索整个代码库的历史记录吗?还是只搜索最新版本(head)的内容? - swilliams
4
FishEye有免费版本,网址为www.atlassian.com/starter。 - David d C e Freitas
1
@DavidFreitas 目前没有免费选项。 - bahrep
有一个价值10美元的FishEye版本:www.atlassian.com/software/starter/overview,@bahrep。一次性捐赠,所有收益都将用于慈善事业。 - David d C e Freitas
1
有一个新的 svn log --search 选项,对于寻找简单仓库历史记录搜索的人可能会很方便。 - bahrep
显示剩余2条评论
14个回答

72

如果你只想查找文件名,请使用:

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

Windows:

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

否则,请检出并进行文件系统搜索:

egrep -r _code_ .

3
这些命令并不仅适用于通过 file: 访问 svn 服务器的方式,可能不是非常明显,但也适用于其他访问方式,比如 svn: 和 svn+ssh:。 - Alex Marshall
2
// , 你能提供每个例子的工作演示吗? - Nathan Basanese
1
OP 想要搜索文件内容,而不仅仅是文件名。文件系统搜索示例并不是很有用。 - erict

37

1
我刚刚自己下载了这个软件 - 目前可用的是1.2.2.0版本。(即已经没有Beta版) - Brett Rigby
SVN搜索的新Source Forge网址: http://svn-search.sourceforge.net/ - Robert Brisita

13

2022年4月更新

VisualSVN Server 5.0通过内容和历史记录实现了全文本仓库搜索。在演示服务器上尝试新的全文本搜索功能。

2020年1月更新

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

请查看版本4.2发布说明,并从主下载页面下载VisualSVN Server 4.2.0。

输入图像描述


旧回答

Subversion 1.8开始,您可以使用svn log命令的--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.

1
这种方法运行速度快,但不应用于搜索文件的存在。由于此搜索选项仅解析每个修订版本中显式更改路径的列表,因此您可以创建包含某个文件的文件夹副本(从主干创建的新分支),但此方法不会列出该文件。 - Pieter-Jan Busschaert
@Pieter-JanBusschaert,您的评论涉及使用svn log --search命令。请参阅有关基于新WebUI搜索的更新答案。它没有这个限制。 - bahrep

10

3
OpenGrok 已经迁移到 http://opengrok.github.io/OpenGrok/。 - alanc

9
  1. 创建该存储库的git-svn镜像。
  2. 在git中搜索添加或删除的字符串:git log -S'我的代码行'或在gitk中执行相同操作。

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


9

这个例子将整个仓库的内容导入到一个文件中,然后你可以在编辑器中快速搜索文件名:

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

如果仓库相对静态且需要进行快速搜索而不必反复从SVN服务器加载所有内容,则此功能非常有用。


4
我应该指出,在我的情况下,有必要使用http作为协议(svn list -R http://repo/svn/etc)。 - Charles Wood
1
因为 OP 想要搜索文件内容而不是文件名,所以被 downvoted。svn list 命令只会输出存储库中的文件名。 - erict

4
注意,FishEye(以及许多其他Atlassian产品)都有10美元的入门版,其中FishEye提供5个存储库和最多10个提交者的访问权限。这种情况下的钱款将捐赠给慈善机构。

www.atlassian.com/starter


不再提供免费选项了吗?我在页面上没有看到免费选项。 - bahrep
@bahrep,我已经更新了答案,现在是$10,这笔钱将捐给慈善机构,如果你考虑到这一点,它实际上是“免费”的。 - David d C e Freitas

4

这看起来有些有希望...但安装起来并不是太容易,无法确认它是否与Trac+VisualSVN Server兼容。 - Kit Roed

3

如果您要搜索单个文件或小型代码库的历史记录,svn log 和 svn cat 的组合可以实现,但速度非常缓慢(且实现粗糙):

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

将输出每个更改文件的修订号。您可以将每个修订版本复制到不同的文件中,然后搜索更改。

附注:向任何能够向我展示如何正确完成此操作的人投票!


3
只需使用 git-svn 命令。Git 内置了搜索提交历史中代码的功能。但是你需要下载整个提交历史才能使用 git-svn - Vi.

2
如果你真的很绝望,可以对仓库进行转储(查看 "svnadmin dump"),然后通过grep搜索。虽然不太美观,但你可以在搜索结果中查找指示文件和版本的元数据,然后将其检出以获得更好的查看效果。
毫无疑问,这不是一个好的解决方案,但它是免费的 :) SVN没有提供搜索过去提交记录(甚至过去的日志文件)的功能。

svnadmin 必须在服务器上执行。您可以在客户端上使用 svnrdump。请参阅 https://dev59.com/PWox5IYBdhLWcg3w9o6h#8867031。 - parvus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接