如何在SubVersion存储库中搜索文件的所有修订版?

Tom*_*Tom 32 svn

我想要grep一个字符串的文件的所有修订版.例如,找到添加或删除功能的时间.

有一种"简单"的方法吗?(即单个bash命令行会很好.)通过检查修订和单独测试来进行手动二进制搜索似乎太单调乏味且容易出错.

如果我足够聪明,可以使用有用的描述提交更改,那么我可以使用grep以下内容进行日志:

svn log myfile.c | grep my_func
Run Code Online (Sandbox Code Playgroud)

虽然这不提供修订号,但我怀疑还有更好的方法.

Pau*_*xon 34

我写了一个脚本来做到这一点

典型用法:

perl searchrev.pl Import.php setImportStatus

----------------------------------------------------------------------
r19565 | johnf | 2009-06-24 14:33:00 +0100 (Wed, 24 Jun 2009) | 1 line
----------------------------------------------------------------------
line 60 $this->setImportStatus($entity_id, $entity_attr_id);
---------------------------------------------------------------------
r13722 | john | 2008-03-10 17:06:14 +0000 (Mon, 10 Mar 2008) | 1 line
---------------------------------------------------------------------
line 70 $this->setImportStatus($entity_id, $entity_attr_id);
---------------------------------------------------------------------
r11692 | paul | 2007-05-23 10:55:45 +0100 (Wed, 23 May 2007) | 1 line
---------------------------------------------------------------------
Not found
---------------------------------------------------------------------
r11691 | paul | 2007-05-23 10:36:26 +0100 (Wed, 23 May 2007) | 1 line
---------------------------------------------------------------------
Not found
---------------------------------------------------------------------
r11683 | paul | 2007-05-23 09:04:29 +0100 (Wed, 23 May 2007) | 1 line
---------------------------------------------------------------------
Not found
Run Code Online (Sandbox Code Playgroud)

这是脚本,很容易破解你自己的目的

#!/usr/bin/perl -w

my $file=$ARGV[0];
my $pattern=$ARGV[1];

my @history=`svn log $file`;
foreach (@history)
{
    chomp;
    if (m/^r(\d+)/)
    {
        my $revision=$1;
        my $sep='-' x length($_);

        print "$sep\n$_\n$sep\n";

        my @code=`svn cat -r $revision $file`;
        my $lineno=0;
        my $found=0;
        foreach my $line (@code)
        {
            $lineno++;
            if ($line=~m/$pattern/)
            {
                $line=~s/^\s+//;
                print "line $lineno $line";
                 $found=1;
            }
        }

        print "Not found\n" unless ($found);
    }
}
Run Code Online (Sandbox Code Playgroud)


Thi*_*ilo 7

"注解/怪"命令不会做的正是你想要的,但它可以帮助:

svn blame - 显示指定文件或URL的内嵌作者和修订信息.

 $ svn blame http://svn.red-bean.com/repos/test/readme.txt
 3      sally This is a README file.
 5      harry You should read this.
Run Code Online (Sandbox Code Playgroud)

所以,你应该能够找出谁添加了一个功能.至于找出谁删除了一个功能,不知道.