有没有什么好的软件可以让我在我的 SVN 存储库中搜索代码片段?我找到了“FishEye”,但成本是 1,200,远远超出了我的预算。
14 回答
如果您只搜索文件名,请使用:
svn list -R file:///subversion/repository | grep filename
视窗:
svn list -R file:///subversion/repository | findstr filename
否则结帐并进行文件系统搜索:
egrep -r _code_ .
有sourceforge.net/projects/svn-search。
还有一个直接来自 SVN 主页的 Windows 应用程序,名为 SvnQuery,可在http://svnquery.tigris.org获得
2020 年 1 月更新
VisualSVN Server 4.2 支持在 Web 界面中查找文件和文件夹。在演示服务器的存储库之一上试用新功能!
请参阅版本 4.2 发行说明,并从主下载页面下载 VisualSVN Server 4.2.0 。
旧答案
从Subversion 1.8 开始,您可以将--search
option 与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.
此示例将存储库的完整内容通过管道传输到文件,然后您可以在编辑器中快速搜索文件名:
svn list -R svn://svn > filelist.txt
如果存储库是相对静态的,并且您希望进行快速搜索而不必从 SVN 服务器重复加载所有内容,这将非常有用。
- 创建
git-svn
该存储库的镜像。 - 在 git: 中搜索添加或删除的字符串,
git log -S'my line of code'
或者在gitk
优点是您可以在本地进行许多搜索,而无需加载服务器和网络连接。
我确实喜欢 TRAC - 这个插件可能对你的任务有帮助:http: //trac-hacks.org/wiki/RepoSearchPlugin
请注意,FishEye(和许多其他 Atlassian 产品)有一个 10 美元的 Starter Edition,就 FishEye 而言,它为您提供 5 个存储库和最多 10 个提交者的访问权限。在这种情况下,这笔钱将用于慈善事业。
非常缓慢(并且粗略地实现),但是如果您正在搜索单个文件或小型存储库的历史记录,则 svn log 和 svn cat 的组合可以工作:
svn log filetosearch |
grep '^r' |
cut -f1 -d' ' |
xargs -i bash -c "echo '{}'; svn cat filetosearch -'{}'"
将输出文件更改的每个修订号和文件。您总是可以将每个修订版分类到不同的文件中,然后 grep 进行更改。
PS。向任何向我展示如何正确执行此操作的人进行大量投票!
如果您真的很绝望,请转储 repo(查看“svnadmin dump”),然后用 grep 遍历它。它不漂亮,但您可以查看搜索结果以找到指示文件和修订的元数据,然后检查它以获得更好的外观。
可以肯定,这不是一个好的解决方案,但它是免费的 :) SVN 不提供搜索过去签到(甚至过去的日志文件,AFAIK)的功能。
许多 SVN 存储库是“简单的”HTTP 站点,因此您可以考虑查看一些现成的“网络爬虫”搜索应用程序,您可以将其指向 SVN 根目录,它会为您提供基本功能。更新它可能会有点技巧,也许黑客中的一些 SVN 检查可以让索引在你去的时候丢弃或重新索引更改。
只是大声思考。
有 krugle 和 koders 但两者都很贵。两者都有 Eclipse 的 ide 插件。
// 编辑:工具已经在另一个答案中提到,所以把所有的功劳都归功于 Kuryaki。
刚刚发现SupoSE,它是一个基于 java 的命令行工具,它扫描存储库以创建索引,然后能够回答某些类型的查询。我们仍在评估该工具,但它看起来很有希望。值得一提的是,它对包括源代码文件和常用办公格式在内的所有修订进行了完整索引。