rjm*_*nro 129 svn full-text-search
有没有办法对subversion存储库执行全文搜索,包括所有历史记录?
例如,我编写了一个我在某个地方使用过的功能,但之后就不需要了,所以我对这些文件进行了调整,但现在我需要再次找到它以将其用于其他内容.svn日志可能会说"删除未使用的东西"之类的内容,并且有大量的签名.
编辑2016-04-15:请注意,术语"全文搜索"在这里提到的是搜索提交历史的实际差异,而不是文件名和/或提交消息.我指出这一点是因为上面的作者的措词并没有很好地反映出来 - 因为在他的例子中他也可能只是寻找文件名和/或提交消息.因此有很多svn log
答案和评论.
小智 74
git svn clone <svn url>
Run Code Online (Sandbox Code Playgroud)
git log -G<some regex>
Run Code Online (Sandbox Code Playgroud)
bah*_*rep 39
svn log
在Apache Subversion 1.8中支持一个新--search
选项.因此,您可以在不使用第三方工具和脚本的情况下搜索Subversion存储库历史记录日志消息.
svn log --search
搜索作者,日期,日志消息文本和更改路径列表.
小智 21
我使用的是一个小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
Run Code Online (Sandbox Code Playgroud)
如果你真的想要搜索所有内容,请使用svnadmin dump
命令并通过grep 查找.
Jac*_* M. 13
我发现这样做的最好方法是:
svn log --verbose | 减
一旦少了输出,你可以点击/
搜索,如VIM.
编辑:
根据作者的说法,他想要搜索的不仅仅是消息和文件名.在这种情况下,您需要与以下内容一起进行密集攻击:
svn diff -r0:HEAD | less
Run Code Online (Sandbox Code Playgroud)
您也可以替换grep
或其他东西来搜索您.如果要在存储库的子目录中使用它,则需要使用它svn log
来识别该目录所在的第一个修订版,并使用该修订版而不是0
.
svn log -v [repository] > somefile.log
Run Code Online (Sandbox Code Playgroud)
对于差异你可以使用该--diff
选项
svn log -v --diff [repository] > somefile.log
Run Code Online (Sandbox Code Playgroud)
然后使用vim或nano或任何你喜欢的东西,并搜索你正在寻找的东西.你很快就会发现它.
这不是一个花哨的脚本或任何自动化的东西.但它的确有效.
虽然不是免费的,但你可以看一下Atlassian的Fisheye,那些给你带来JIRA的人.它使用许多其他有用的功能对SVN进行全文搜索.
http://www.atlassian.com/software/fisheye/
我刚遇到这个问题
svnadmin dump <repo location> |grep -i <search term>
Run Code Online (Sandbox Code Playgroud)
为我做了这项工作。返回第一次出现的修订并引用我正在寻找的行。