【问题标题】:How do I find/search/grep an SVN repository history?如何查找/搜索/grep SVN 存储库历史记录?
【发布时间】:2011-04-11 18:07:41
【问题描述】:

我需要搜索 Subversion 存储库的所有修订以查找包含特定字符串的文件名和修订号。我知道这会在转储中找到:

svnadmin dump $REPO_PATH | grep -i "Verdana"

但是输出太神秘了。输出将包括匹配的二进制文件块。

我一直在使用这样的命令在项目的当前工作副本中搜索字符串:

find . -name "*.css" -print0 | xargs -0 grep "Verdana"

输出的格式很有用,它给出了文件名和字符串出现的行:

./css/forms.css: font       : 12px Verdana;

有什么方法可以搜索 SVN 存储库的所有修订版,比如所有包含搜索字符串的 .css 文件?不仅仅是一个单词,而是一个带有通配符的字符串或像 grep 这样的正则表达式?

注意:我对带有存储库的 Linux 服务器具有 root 访问权限。

另请注意:我不想搜索工作副本,我需要搜索所有修订版。

【问题讨论】:

标签: svn search grep


【解决方案1】:

你试过了吗

svn log --verbose

在您的根目录上,打印每条日志消息和所有受影响的路径。它不会让您解析文件内容,但您至少可以搜索 .css 文件。

【讨论】:

  • 是的,搜索文件名似乎有很多解决方案。内容比较复杂。
  • 您可以使用 'diff' 在最新版本和任何以前的版本之间生成纯文本输出。也许您甚至可以根据 'svn log' 的结果将 'diff' 限制为某些文件。
  • stackoverflow.com/questions/1118051/… 几乎是这个问题的重复,但只搜索一个文件的所有修订。 subversion.tigris.org/ds/… 似乎是一种有趣的方法,但并非开箱即用。
【解决方案2】:

最简单(也是我发现的最有效)的方法,并且需要花费一些时间来预先投入 - 将 svn 存储库克隆到 git,然后使用 gitk 搜索存储库。

由于整个存储库都在您的本地系统上,它使搜索无限更快!

我曾经为大约 30 名开发人员管理一个大型 subversion 存储库,他们经常来到我的办公桌前问,“你能找到这个变化吗..”等等。我会启动 gitk!

svn log 非常慢,因为它必须访问服务器。此外,如果您可以访问服务器,您可能需要设计一些 | grep -v 或类似的方法来清除所有 .svn 目录。

【讨论】:

    【解决方案3】:

    顺着思路思考:

    svn log $location -q | grep -P 'r\d+' -o | grep -P '\d+' -o | xargs -l1 svn diff -c | grep $pattern
    

    我认为通过调整您提供给 grep 的标志或编写更复杂的管道(可能通过管道连接到循环而不是使用 xargs),您可以 grep SVN 历史记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2011-02-25
      相关资源
      最近更新 更多