SVN存储库搜索[关闭]


155

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


6
您需要搜索回购历史吗?还是只是头?
swiilliams

4
FishEye有免费版本-www.atlassian.com/starter
David d C e Freitas

1
@DavidFreitas现在没有免费选项
bahrep 2013年

有$ 10版鱼眼:www.atlassian.com/software/starter/overview,@bahrep。一旦关闭,所有收益将捐献给慈善机构。
大卫·德·弗雷塔斯

1
有一个新的svn log --search选项,对于寻找简单的存储库历史记录搜索的人可能会很方便。
bahrep

Answers:


69

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

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

视窗:

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

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

egrep -r _code_ .

3
可能并不完全明显,但是这些命令适用于访问svn服务器的任何方法,而不仅限于文件:(例如svn:和svn + ssh:也可以使用)
Alex Marshall

2
//,您介意为每个示例提供一个有效的示例吗?
弥敦道(Nathan Basanese),2015年

1
OP希望搜索文件,而不仅仅是文件名。文件系统搜索示例不是很有用。
2015年


12

2020年1月更新

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

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

在此处输入图片说明


旧答案

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

  • 修订的作者(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


9
  1. 创造 git-svn该存储库的镜像。
  2. 搜索混帐里面添加或删除字符串:git log -S'my line of code'或在同一gitk

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


8

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

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

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


4
我应该注意,就我而言,有必要将其http用作协议(svn list -R http://repo/svn/etc)。
查尔斯·伍德

之所以投票,是因为OP希望搜索文件而不是文件名。svn list命令仅转储存储库的文件名。
2015年


4

仅需注意,FishEye(以及许多其他Atlassian产品)具有10美元的简化版,在FishEye的情况下,您可以使用5个存储库,最多可以访问10个提交者。在这种情况下,钱用于慈善事业。

www.atlassian.com/starter


不再?我在页面上看不到免费选项。
bahrep

@bahrep,我已经更新了答案,现在是10美元,将捐给慈善机构,如果您考虑一下,它实际上是“免费的”。
大卫·德·弗雷塔斯

3

痛苦缓慢(并且粗略实现),但是如果您正在搜索单个文件或小型存储库的历史记录,则可以将svn log和svn cat结合使用:

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

将输出文件更改的每个修订号和文件。您总是可以将每个修订放入不同的文件中,然后使用grep进行更改。

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


3
只需使用git-svn。Git在提交历史记录中内置了代码搜索功能。但是您需要下载整个提交历史记录才能使用git-svn
六。

2

如果您真的很绝望,请对存储库进行转储(请参阅“ svnadmin dump”),然后通过它进行grep。它不是很漂亮,但是您可以浏览搜索结果以找到指示文件和修订的元数据,然后对其进行检查以获得更好的外观。

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


1

许多SVN仓库都是“简单的” HTTP站点,因此您可以考虑查看一些现成的“ Web爬行”搜索应用程序,您可以指向SVN根目录,它会为您提供基本功能。更新它可能会有些花招,也许某些SVN黑客检查可能会使索引变痒,以随您的需要放弃或重新索引更改。

只是大声思考。


1
这可能不是一个好主意,因为所涉及的开销非常大。另外,SVN服务器通常不是常规的网页,而是通过webdav公开的svn存储库。
torkildr



0

//编辑:在另一个答案中已经提到了该工具,因此请全数归功于Kuryaki。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.