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

svn提供哪些报告?

  •  6
  • Bravax  · 技术社区  · 16 年前

    不幸的是,我们定期接受审计,审计人员需要以下信息:
    文件更改的历史记录

    新增档案
    文件中的更改

    是否有一个工具可以为我们(或其中一些)生成这些报告?

    10 回复  |  直到 16 年前
        1
  •  7
  •   Andrew Gable    11 年前

    StatSVN 是一个轻量级的subversion报告生成器。 http://www.statsvn.org/

    1. 首先生成详细的日志文件- svn log

    2. StatSVN ,它是一个jar文件。

    StatSVN 提供指标列表:

    • 哪个文件更改最多
    • 添加了多少行
        2
  •  4
  •   rajasaur    16 年前

    Trac( http://trac.edgewall.com )可用于查看SVN详细信息。Trac有一些很好的特性,比如变更集视图,允许查看不同的变更集(并来回查看)。它还提供了一个很好的UI,比ViewVC(www.ViewVC.org)要好得多

        3
  •  2
  •   Indeed is Trash    16 年前

    svn log 是获取要查找的文件相关信息的基本命令。。。

        4
  •  2
  •   Kevin    16 年前

    您可以通过SVN修订日志获得所有这些信息。你可能想考虑一个很好的工具 Fisheye

        5
  •  2
  •   Simon    16 年前

    SVN从命令行提供了许多您需要的功能:

    • 特定文件/目录的更改历史记录: svn log /your/path 提供源代码差异、作者、签入日期等。
    • 新增文件: svnlook changed -r <rev> <path to repository> grep 对于“A”,表示添加的文件。
    • 文件中的更改: svn diff -r <first rev>:<last rev> <path> 为您提供整个修订范围的差异
    • svn log ).至于读取访问,我不知道有什么内置机制,但是您可以根据配置轻松创建自己的机制。如果只允许http访问,则可以使用Web服务器的日志文件。

    这并不漂亮,但SVN的输出是高度结构化的,因此您可以轻松地进行自己的格式化。

        6
  •  1
  •   a belle a belle    16 年前

    以下是我以前使用过的一些方法,它们可以让我大致了解变化活动报告和趋势。过滤并不完美,但您可以了解:

    set REPO_URL=svn://localhost/...
    set REVISION_START=1
    set REVISION_END=HEAD 
    set COMMAND=svn log %REPO_URL% -v -g -r %REVISION_START%:%REVISION_END% 
    set REG_EXPRESSION="^...[ACDIMRX].\/"
    

    受影响的配置项目:

    %COMMAND% | find /c "/"
    

    变更集:

    %COMMAND% | find /c "Changed paths"
    

    %COMMAND% | findstr /r %REG_EXPRESSION% | sort | uniq -u
    
        7
  •  0
  •   Cristian Libardo    16 年前

    看看 codesaga . 它在可视化源代码管理提交方面做得很好。我不能保证报告的部分。

        8
  •  0
  •   ccook    16 年前

    这个程序可能会帮助你,不是审计,而是更新

    http://www.svnmonitor.com/default.shtml

    • 监视源中的某些事件
    • 当某些事件发生时,接收任何类型的通知(气球弹出窗口、托盘图标、电子邮件、声音等)
        9
  •  0
  •   orip    16 年前

        10
  •  0
  •   David Gil del Rosal    8 年前

    这个问题也有点老了,但我已经编写了一个脚本,它可能对Subversion的简单报告/审核有用,并跟踪对SVN存储库所做的更改,我想与大家分享。它提取 有关SVN的信息以类似于命令“svnlook”的方式提交,但它有两个优点。首先,它允许迭代存储库的所有修订,以跟踪所做的所有更改。其次是 嵌入在SVN post commit挂钩中。

    它是一个名为svn-commit-info.pl的Perl脚本,包含三个参数。第一个是存储库路径 这是强制性的。第二个选项(可选)是要搜索的文件模式。第三个也是可选的,是 要查询的修订号。

    如果仅使用存储库路径执行,它将向标准输出受所有路径影响的文件的信息 在存储库中进行的提交。例如,假设存储库存储在 Subversion服务器:

    $ perl svn-commit-info.pl /svn/repos/test
    # Repository: /svn/repos/test
    # Fields: Action, Revision, Date, Author, Bytes, Path
    # Actions: A = New, D = Deleted, U = Updated
    A    1     2017-01-31 17:21:19     Samsa     <DIR>    TestProject/
    A    2     2017-01-31 17:21:33     Samsa       815    TestProject/.project
    A    2     2017-01-31 17:21:33     Samsa     <DIR>    TestProject/.settings/
    A    2     2017-01-31 17:21:33     Samsa       564    TestProject/.settings/.jsdtscope
    A    2     2017-01-31 17:21:33     Samsa     <DIR>    TestProject/www/
    A    3     2017-01-31 17:27:48     David       355    TestProject/www/test.html
    A    3     2017-01-31 17:27:48     David     <DIR>    TestProject/www/css/
    A    3     2017-01-31 17:27:48     David      9622    TestProject/www/css/logo.jpg
    A    3     2017-01-31 17:27:48     David      1231    TestProject/www/css/reportstyle.css
    A    3     2017-01-31 17:27:48     David    168345    TestProject/www/css/style.css
    U    4     2017-02-01 10:48:34     Samsa    183260    TestProject/www/css/style.css
    D    5     2017-02-01 12:51:26     David       355    TestProject/www/test.html            
    

    以选项卡分隔的字段包括:执行的操作、修订号、日期和时间、修订作者和 文件大小(以字节为单位)(除非文件是由字符串“<DIR>”标记的目录)和受影响文件在 存储库。前三行包含关于输出的面向人的注释。

    指定文件模式(实际上是Perl regexp)。例如,获取有关更改的信息

    $ perl svn-commit-info.pl /svn/repos/test style.css
    

    如果您对特定修订感兴趣,可以指定第三个参数。例如,打印所有更改 考虑到“.”与Perl正则表达式中的任何字符相匹配:

    $ perl svn-commit-info.pl /svn/repos/test . 3
    

    当然,您可以利用Unix过滤器和管道的强大功能来执行更复杂的查询,例如

    $ svn-commit-info.pl /svn/repos/test | grep David
    

    查找使用大小创建的所有文件>=1Mb:

    $ svn-commit-info.pl /svn/repos/test | awk '$1 = "A" && $6 ~ /[0-9]/ && $6 >= 1024*1024'
    

    该脚本使用标准的Subversion命令“svnlook”,但在其他方面它是自包含的。那里 是两个帮助函数,用于生成命令并获取“svnlook”的输出,然后对 已经在Perl5.10上进行了测试。

    #!/usr/bin/env perl
    use strict; 
    
    my $SVNLOOKCMD = "/usr/bin/svnlook";
    my @FIELDS = qw(Action Revision Date Author Bytes Path);
    
    # Builds and returns the "svnlook" command
    sub svnlook_cmd {
       my($repository, $action, $revision, @varargs) = @_;
       my $cmd = $SVNLOOKCMD;
       $cmd.= " -r $revision" if $revision;
       $cmd.= " $action '$repository'";
       $cmd.= join "", map { " '$_'" } @varargs;
       $cmd.= '|';
       return $cmd;
    }
    
    # Executes the "svnlook" command and returns the output lines
    sub svnlook_output {
       my($repository, $action, $revision, @varargs) = @_;
       open(my $svnlookfh, svnlook_cmd $repository, $action, $revision, @varargs);
       my @output = <$svnlookfh>;
       close $svnlookfh;
       chomp @output;
       return wantarray ? @output : $output[0];
    }
    
    my($repository, $file, $revision) = @ARGV;
    unless($repository) {
        # 'repository' is the only mandatory argument
        print STDERR "$0 <repository> [<file>] [<revision>]\n";
        print STDERR "\t<repository> = path of Subversion repository\n";
        print STDERR "\t<file> = file pattern to search for (regular expression)\n";
        print STDERR "\t<revision> = commit revision number\n";
        exit 1;
    }
    $file = "." unless $file;
    my $first = $revision ? $revision : 1;
    my $last = $revision ? $revision : svnlook_output $repository, "youngest";
    print "# Repository: $repository\n";
    print "# Fields: ", join(", ", @FIELDS), "\n";
    print "# Actions: A = New, D = Deleted, U = Updated\n";
    for(my $rev = $first; $rev <= $last; $rev++) {
        my $author = "";
        my $date = "";
        foreach my $line (svnlook_output $repository, "changed", $rev) {
            if($line =~ /$file/i) {
                unless($date) {
                    $date = svnlook_output $repository, "date", $rev;
                    $date =~ s|^(\S+) (\S+).*$|\1 \2|;
                }
                $author = uc svnlook_output $repository, "author", $rev unless $author;
                my($action, $path) = split /\s+/, $line, 2;
                my $size;
                if($path =~ m|/$|) {
                    $size = sprintf("%12s", "<DIR>");
                } else {
                    $size = svnlook_output $repository, "filesize", $rev, $path;
                    $size = sprintf("%12d", $size);
                }
                print join("\t", $action, $rev, $date, $author, $size, $path), "\n";
            }
        }
    }
    exit 0;