有没有办法对subversion存储库执行全文搜索,包括所有历史记录?
例如,我编写了一个我在某个地方使用过的功能,但之后就不需要了,所以我对这些文件进行了调整,但现在我需要再次找到它以将其用于其他内容.svn日志可能会说"删除未使用的东西"之类的内容,并且有大量的签名.
编辑2016-04-15:请注意,术语"全文搜索"在这里提到的是搜索提交历史的实际差异,而不是文件名和/或提交消息.我指出这一点是因为上面的作者的措词并没有很好地反映出来 - 因为在他的例子中他也可能只是寻找文件名和/或提交消息.因此有很多svn log
答案和评论.
git svn clone
git log -G
svn log
在Apache Subversion 1.8中支持一个新--search
选项.因此,您可以在不使用第三方工具和脚本的情况下搜索Subversion存储库历史记录日志消息.
svn log --search
搜索作者,日期,日志消息文本和更改路径列表.
见SVNBook | svn log
命令行参考.
如果您正在运行Windows,请查看SvnQuery.它维护本地或远程存储库的全文索引.每个提交到存储库的文档都会被编入索引.您可以通过简单的Web界面进行类似Google的查询.
我使用的是一个小shellcript,但这仅适用于单个文件.您可以将此与find结合使用以包含更多文件.
#!/bin/bash for REV in `svn log $1 | grep ^r[0-9] | awk '{print $1}'`; do svn cat $1 -r $REV | grep -q $2 if [ $? -eq 0 ]; then echo "$REV" fi done
如果你真的想要搜索所有内容,请使用svnadmin dump
命令并通过grep 查找.
我发现这样做的最好方法是:
svn log --verbose | 减
一旦少了输出,你可以点击/
搜索,如VIM.
编辑:
根据作者的说法,他想要搜索的不仅仅是消息和文件名.在这种情况下,您需要与以下内容一起进行密集攻击:
svn diff -r0:HEAD | less
您也可以替换grep
或其他东西来搜索您.如果要在存储库的子目录中使用它,则需要使用它svn log
来识别该目录所在的第一个修订版,并使用该修订版而不是0
.
我一直在寻找类似的东西.我提出的最好的是OpenGrok.我还没有尝试过实现它,但听起来很有希望.
svn log -v [repository] > somefile.log
对于差异你可以使用该--diff
选项
svn log -v --diff [repository] > somefile.log
然后使用vim或nano或任何你喜欢的东西,并搜索你正在寻找的东西.你很快就会发现它.
这不是一个花哨的脚本或任何自动化的东西.但它的确有效.
虽然不是免费的,但你可以看一下Atlassian的Fisheye,那些给你带来JIRA的人.它使用许多其他有用的功能对SVN进行全文搜索.
http://www.atlassian.com/software/fisheye/