SVN存储库搜索[关闭]

Posted

技术标签:

【中文标题】SVN存储库搜索[关闭]【英文标题】:SVN Repository Search [closed] 【发布时间】:2010-09-20 05:34:59 【问题描述】:

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

【问题讨论】:

你需要搜索repo的历史吗?还是只是头部? 有免费版本的 FishEye - www.atlassian.com/starter @DavidFreitas 现在没有免费选项 有 10 美元的 FishEye 版本:www.atlassian.com/software/starter/overview、@bahrep。一旦关闭,所有收益都会用于慈善事业。 有一个新的svn log --search 选项,对于寻找简单的存储库历史搜索的人来说可能很方便。 【参考方案1】:

2020 年 1 月更新

VisualSVN Server 4.2 支持在 Web 界面中查找文件和文件夹。在demo server’s repositories 之一上试用新功能!

查看version 4.2 Release Notes,并从main download page下载VisualSVN Server 4.2.0。


旧答案

以Subversion 1.8, you can use --search option with svn log 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.

【讨论】:

此方法运行速度很快,但不应用于搜索文件是否存在。由于此搜索选项仅解析每个修订版中显式更改的路径列表,因此您可以在存在特定文件的位置创建文件夹副本(从主干创建的新分支),但不会通过此方法列出。 @Pieter-JanBusschaert 您的评论是关于使用 svn log --search 命令。请参阅有关基于 webui 的新搜索的更新答案。它没有这个限制。【参考方案2】:

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

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

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

【讨论】:

我应该注意,在我的情况下,有必要使用http 作为协议(svn list -R http://repo/svn/etc)。 否决,因为 OP 想要搜索文件,而不是文件名。 svn list 命令只转储存储库的文件名。【参考方案3】:

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

www.atlassian.com/starter

【讨论】:

不再了吗?我在页面上没有看到免费选项。 @bahrep,我已经更新了答案,现在是 10 美元捐给慈善机构,如果您考虑一下,这实际上是“免费”的。【参考方案4】:

有sourceforge.net/projects/svn-search。

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

【讨论】:

我自己刚刚下载了这个 - 版本 1.2.2.0 目前可用。 (即超出测试版) SVN 搜索的新 Source Forge URL:svn-search.sourceforge.net【参考方案5】:

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

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

窗户:

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

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

egrep -r _code_ .

【讨论】:

这可能不是很明显,但是这些命令适用于任何访问 svn 服务器的方法,而不仅仅是文件:(例如 svn: 和 svn+ssh: 也可以) // ,您介意为每一个提供一个工作示例吗? OP 想要搜索文件,而不仅仅是文件名。文件系统搜索示例不是很有用。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

我开始使用这个工具

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

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

【讨论】:

现在(2012 年 8 月)该项目似乎停滞不前... 2012 年 12 月,他们发布了一些新的东西 (0.7.1) 好像消失了【参考方案8】:
    创建该存储库的git-svn 镜像。 在 git 中搜索添加或删除的字符串:git log -S'my line of code'gitk 中的相同

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

【讨论】:

【参考方案9】:

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

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

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

附言。向任何向我展示如何正确执行此操作的人投票!

【讨论】:

只需使用git-svn。 Git 在提交历史中内置了代码搜索功能。但是你需要下载整个提交历史才能使用git-svn【参考方案10】:

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

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

【讨论】:

svnadmin 必须在服务器上执行。您可以在客户端使用 svnrdump。见***.com/a/8867031/911550【参考方案11】:

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

【讨论】:

OpenGrok 现已移至opengrok.github.io/OpenGrok。【参考方案12】:

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

【讨论】:

这看起来很有希望......但安装起来不太容易,无法确认它是否适用于 Trac+VisualSVN 服务器。【参考方案13】:

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

【讨论】:

Krugle Basic 怎么样?【参考方案14】:

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

只是大声思考。

【讨论】:

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

以上是关于SVN存储库搜索[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 SVN 存储库中搜索 office 文档的工具

修复损坏的 SVN 存储库

将现有的 SVN 存储库导入 SVN 服务器 [关闭]

TortiseSVN svn+ssh 错误:无法连接到 URL 上的存储库...网络连接意外关闭

如何批量重写 SVN 日志?

TortoiseSVN 没有连接到存储库