代码之家  ›  专栏  ›  技术社区  ›  Liam

如何查找/搜索/grep SVN存储库历史记录?

  •  7
  • Liam  · 技术社区  · 15 年前

    我需要搜索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服务器的根访问权限,其中包含存储库。

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

    3 回复  |  直到 9 年前
        1
  •  5
  •   quickshiftin    12 年前

    最简单(也是我发现的最有效)的方法是这样做,而且需要一点前期投资-将svn存储库克隆到git中,然后使用gitk搜索存储库。

    因为整个存储库都在本地系统上,所以它会进行搜索 无限 快点!

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

    svn log 速度太慢了,因为它必须攻击服务器。另外,如果您有权访问服务器,则可能需要设计一些 | grep -v 或者类似于把所有的 .svn 目录。

        2
  •  0
  •   zellus    15 年前

    你试过了吗

    svn log --verbose
    

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

        3
  •  0
  •   Alexei Averchenko    10 年前

    大致考虑一下:

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

    我认为通过调整给grep的标志或者编写一个更复杂的管道(可能通过管道到循环而不是使用 xargs )你可以为SVN历史做任何事。

    推荐文章