搜索颠覆历史(全文)

时间:2020-03-05 18:47:44  来源:igfitidea点击:

有没有一种方法可以对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>