我们正在转向SVN。什么样的报告可用于svn?
不幸的是,我们会定期审核,在审核员需要类似的信息:文件的更改
历史访问SVN的
新文件
史加
变化的文件
有一个可以为我们(或其中一些)生成这些报告的工具?
我们正在转向SVN。什么样的报告可用于svn?
不幸的是,我们会定期审核,在审核员需要类似的信息:文件的更改
历史访问SVN的
新文件
史加
变化的文件
有一个可以为我们(或其中一些)生成这些报告的工具?
svn log是基本的命令,让您正在查找的文件相关的信息......
你可以拥有所有这些信息只是通过SVN版本日志。你可能想要考虑一个像Fisheye这样的好工具来为你做。
看看codesaga。它可视化源代码控制提交很好。我无法担保报告部分。
这个程序可以帮助你,不是审计,而是更新
http://www.svnmonitor.com/default.shtml
Trac(http://trac.edgewall.com)可用于查看SVN详细信息。 Trac具有很好的功能,如变更集视图,可以查看不同的变更集(并通过它们来回移动)。这也提出了一个很好的用户界面,比ViewVC好得多(www.viewvc.org)
此外,它也是一个问题跟踪器和项目管理系统(将任务分配给里程碑,构建路线图等)。 – stpe 2009-01-21 21:08:29
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的输出结构非常高,因此您可以轻松地进行自己的格式设置。
要查看对SVN的实际访问,您需要解析Apache服务器日志(假设您通过Apache为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
这个问题也有点老,但我已经制作了一个脚本,可能对Subversion的简单报告/审计有用d跟踪对SVN存储库所做的更改,并且我想分享它。它以类似于命令“svnlook”的方式提取关于SVN提交的信息,但它具有一对优点。首先,它允许遍历存储库的所有修订版,以跟踪所做的所有更改。其次, 信息以制表符分隔的格式打印(如在ps或df等Unix命令中),它们都是人类可读的,并且易于解析或导入到电子表格中,这非常适合报告。它也可以被称为嵌入在SVN后提交钩子或 。
这是一个名为svn-commit-info.pl的Perl脚本,它有三个参数。第一个是存储库路径 ,它是强制性的。第二个是可选的,是要搜索的文件模式。第三个也是可选的,是要查询的修订版号码 。
如果仅使用存储库路径执行,它会向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
的制表符分隔字段是:所执行的操作,版本号,日期和时间,作者 文件大小(以字节为单位)(除非文件是由字符串“<DIR>”标记的目录)以及 存储库中受影响文件的路径。前三行包含关于输出的以人为本的评论。
如果存储库很大,并且有很多文件或修订版本,则前一个命令的输出可能需要很长时间才能完成。如果您想跟踪对特定文件(或一组文件)所做的更改,最好指定文件模式(实际上,它是一个Perl正则表达式) 。例如,要获取有关文件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”输出的两个帮助函数,然后连续调用 该命令组成输出。它需要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;
希望这有助于和长期发帖抱歉。
您使用的是什么问题跟踪器?通常情况下,问题跟踪器会提供一些回购报告。 – Joshua 2009-01-21 19:16:49
我们使用定制的问题跟踪器,它与任何东西都不兼容。 – Bravax 2009-01-21 19:53:26