我们正在移动的过程中SVN.

不幸的是我们,我们的审计周期,审计委员会要求的信息,如:
历史的变化文件
历史的访问SVN
新添加的文件
改变在文件

是有一个工具,它可以产生这些报告对我们(或一些)?

有帮助吗?

解决方案

StatSVN 是一个颠复报告发生器。http://www.statsvn.org/

  1. 第一产生的详细记录的文件 svn log

  2. 运行 StatSVN 它是一个罐子的文件。

StatSVN 提供一系列指标:

  • 该文件是改变大
  • 有多少线路被加入
  • 是谁贡献更多

其他提示

Trac系统( http://trac.edgewall.com )可被用于查看SVN细节。 Trac系统具有良好的特性,如变更视图,允许看到不同的变更(去向后或向前通过它们)。它也提出了一个很好的用户界面,比ViewVC好得多(www.viewvc.org)

SVN登录是基本命令来获取相关的文件信息你正在寻找...

您可以拥有所有的这些信息只是通过SVN版本日志。你可能要考虑一个很好的工具如鱼眼来,虽然这样做对你。

SVN提供了很多你的要求从命令行:

  • 历史改变特定文件的/目录: svn log /your/path 给你源代码差异、作者、检查的日期等。
  • 新添加的文件: svnlook changed -r <rev> <path to repository> 给你所有文件都触及在给定的修订。环超过所有相关的修订, grep 对于"A"表示加入的文件。
  • 改变在文件: svn diff -r <first rev>:<last rev> <path> 给你一个差异对整个范围的修订
  • 历史的访问SVN:SVN显然维持着一个日志的所有检查程序(见 svn log).因为阅读的访问,我不知道的内置机制,但是你也许可以创建你自己的一点努力,这取决于构型。如果你只允许http访问,可以使用的网络服务器的记录文件。

这不是很漂亮,但SVN的输出是高度结构化所以你可以做你自己的格式,很容易。

下面是一些我以前用来给处于变革活动报告和趋势一目了然。过滤是不完美的,但你可以得到的想法:

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"

这是已经影响到了指定的版本范围(我已经安装了cygwin)独特的文件列表:

%COMMAND% | findstr /r %REG_EXPRESSION% | sort | uniq -u

看一看 codesaga 。它使可视化源代码控制提交的一份好工作。我不能保证报告的一部分。

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

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

  • 监视源于某些事件
  • 收到通知的任何类型(气的弹出窗口,盘图标,电子邮件、声音...)在特定事件发生时

要看到实际的访问SVN,你需要解析的Apache服务器日志(假设你的服务SVN超过阿帕奇)。

这问题也有点老了,但我已经制作了一个脚本,可能是颠覆简单的报告/审计有用的,并且可以跟踪到一个SVN仓库所做的更改,我想分享它。它提取 关于SVN信息提交以类似的方式对命令“svnlook的”,但它具有一对优点。首先,它允许遍历版本库的所有修订,以保持所做的所有更改轨道。二, 信息被印刷在一个制表符分隔表格格式(如Unix命令等PS或DF)是人可读和易于解析或导入到电子表格中,这是很大的用于报告。它也可以被称为或 嵌入在SVN post-commit钩子。

有一个Perl脚本称为svn-commit-info.pl和三个参数。首先是资料库路径 它是强制性的。第二,可选的,是搜索的文件模式。第三,也是可选的,是 版本号来查询。

如果仅与储存库路径执行,它打印至约受所有文件STDOUT信息 犯资源库做了。例如,假设存储库被存储在/ SVN /回购/测试 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            

在制表符分隔字段是:所执行的操作,版本号,日期和时间,修改的作者, 以字节为单位的文件大小(除非该文件是由字符串标记的目录“

”)和受影响的文件中的路径 库。前三行包含以人为本关于输出评价。

前者命令的输出可能需要很长的时间来完成,如果存储库是大,有许多文件或 修订。如果你想跟踪一个特定的文件(或一组文件)所做的更改,这是更好 指定文件模式(即,实际上是一个Perl的regexp)。例如,要获取有关更改的信息 到文件的style.css制备:

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

如果你有兴趣在一个特定的版本,您可以指定第三个参数。例如,要打印所有的变化 第三次修订中,考虑到“”任何字符在一个Perl正则表达式匹配:

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

当然,你可以利用Unix的过滤器和管道做更复杂的查询的权力,例如 发现由用户David所作的所有修改:

$ 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”一输出,并随后mades连续调用 该命令以构成输出。它需要的Subversion> = 1.7并且它具有 Perl的5.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;

希望这有助于和遗憾的长柱。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top