搜索颠覆历史(全文)
有没有一种方法可以对Subversion存储库(包括所有历史记录)执行全文搜索?
例如,我写了一个我在某处使用过的功能,但后来并不需要它,所以我对文件进行了编码,但是现在我需要再次查找它以将其用于其他用途。 svn日志可能会显示诸如"删除未使用的东西"之类的内容,并且有大量的签入内容。
编辑2016-04-15:请注意,术语"全文本搜索"在这里要求的是搜索提交历史记录的实际差异,而不是文件名和/或者提交消息。我指出这一点是因为作者的上面措辞不能很好地反映这一点,因为在他的示例中,他可能还只是在寻找文件名和/或者提交消息。因此,很多svn log
的答案和评论。
解决方案
回答
我没有任何经验,但是SupoSE(用Java编写的开放源代码)是专门用于实现此目的的工具。
回答
我一直在寻找类似的东西。我想出的最好的是OpenGrok。我还没有尝试实现它,但是听起来很有希望。
回答
我发现做到这一点的最佳方法是减少花费:
svn log --verbose | less
一旦输出更少,就可以像VIM一样按/
进行搜索。
编辑:
根据作者的说法,他想搜索的不仅仅是消息和文件名。在这种情况下,我们将被要求与诸如以下内容一起进行贫民窟破解:
svn diff -r0:HEAD | less
我们也可以用grep
或者其他方法来搜索。如果要在存储库的子目录上使用它,则需要使用svn log
来识别该目录所在的第一个修订版本,并使用该修订版本而不是0
。
回答
我通常按照Hyman M的说做(使用svn log --verbose),但是我用管道传递给grep而不是更少。
回答
我在寻找相同的东西,发现了这一点:
http://svn-search.sourceforge.net/
回答
如果我们正在运行Windows,请查看SvnQuery。它维护本地或者远程存储库的全文本索引。曾经提交到存储库的每个文档都会被索引。我们可以通过简单的网络界面进行类似Google的查询。
回答
我正在使用一个小的shellscript,但这仅适用于单个文件。我们当然可以将其与find结合使用以包含更多文件。
#!/bin/bash for REV in `svn log | grep ^r[0-9] | awk '{print }'`; do svn cat -r $REV | grep -q if [ $? -eq 0 ]; then echo "$REV" fi done
如果我们真的想搜索所有内容,请使用svnadmin dump
命令并执行grep。
回答
虽然不是免费的,但我们可以看看Atlassian的Fisheye,这些人为我们带来JIRA。它使用许多其他有用的功能针对SVN进行了全文搜索。
http://www.atlassian.com/software/fisheye/
回答
我刚遇到这个问题,
svnadmin dump <repo location> |grep -i <search term>
为我做了工作。返回第一次出现的修订,并引用了我要查找的行。
回答
git svn clone <svn url>
git log -G<some regex>