質問
現在SVNに移行中です。
残念ながら、私たちは定期的に監査を受けており、監査人は次のような情報を必要とします:
ファイルの変更履歴
SVNへのアクセス履歴
新しいファイルが追加されました
ファイルの変更
これらのレポート(またはこれらの一部)を作成できるツールはありますか?
解決
StatSVN
は、軽量のSubversionレポートジェネレーターです。
http://www.statsvn.org/
<=>はメトリックのリストを提供します:
- どのファイルが最も変更されているか
- 追加される行数
- 誰がより多くの貢献をしていますか
他のヒント
Trac( http://trac.edgewall.com )を使用してSVNの詳細を表示できます。 Tracには、さまざまなチェンジセットを表示(およびそれらを前後に移動)できるチェンジセットビューなどの便利な機能があります。また、ViewVC(www.viewvc.org)よりもはるかに優れたUIを提供します
svnログは、ファイルに関連する基本的なコマンドですお探しの情報...
SVNリビジョンログだけで、すべての情報を入手できます。ただし、 Fisheye などの便利なツールを使用すると便利です。
SVNは、コマンドラインから要求する内容の多くを提供します。
- 特定のファイル/ディレクトリの変更履歴:
svn log /your/path
は、ソースコードの差分、作成者、チェックイン日などを提供します。 - 新しいファイルが追加されました:
svnlook changed -r <rev> <path to repository>
は、指定されたリビジョンで変更されたすべてのファイルを提供します。関連するすべてのリビジョン、および<!> quot; A <!> quotのgrep
をループします。追加されたファイルを示します。 - ファイルの変更:
svn diff -r <first rev>:<last rev> <path>
は、リビジョン全体の差分を提供します - SVNへのアクセス履歴:SVNは、明らかにすべてのチェックインのログを保持します(
svn log
を参照)。読み取りアクセスに関しては、組み込みのメカニズムについては知りませんが、構成によっては、ほとんど労力をかけずに独自のメカニズムを作成できます。 httpアクセスのみを許可する場合は、Webサーバーのログファイルを使用できます。
見栄えはよくありませんが、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サーバーのログを解析する必要があります(Apache経由でSVNにサービスを提供している場合)。
この質問も少し古いですが、Subversionの単純なレポート/監査に役立ち、SVNリポジトリに加えられた変更を追跡するのに役立つスクリプトを作成し、それを共有したいと考えました。抽出する コマンド<!> quot; svnlook <!> quotと同様の方法でのSVNコミットに関する情報。ただし、2つの利点があります。まず、リポジトリのすべてのリビジョンを反復処理して、行われたすべての変更を追跡できます。第二に、 情報は、タブで区切られた表形式(psやdfなどのUnixコマンドなど)で印刷されます。これは、人間が読める形式であり、解析やスプレッドシートへのインポートが簡単です。または、呼び出すこともできます SVNコミット後フックに埋め込まれています。
svn-commit-info.plというPerlスクリプトで、3つの引数を取ります。最初はリポジトリパスです そしてそれは必須です。 2番目のオプションは、検索するファイルパターンです。また、3番目はオプションです。 クエリするリビジョン番号。
リポジトリパスのみで実行すると、すべての影響を受けるファイルに関する情報をSTDOUTに出力します リポジトリで行われたコミット。たとえば、リポジトリが/ svn / repos / testに保存されていると仮定します 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
タブで区切られたフィールドは、実行された操作、リビジョン番号、日付と時刻、リビジョンの作成者、 バイト単位のファイルサイズ(ファイルが文字列<!> quot; <!> lt; DIR <!> gt; <!> quot;でマークされたディレクトリでない場合)およびファイル内の影響を受けるファイルのパス リポジトリ。最初の3行には、出力に関する人間向けのコメントが含まれています。
前のコマンドの出力は、リポジトリが大きく、多くのファイルがある場合、または 改訂。特定のファイル(または一連のファイル)に加えられた変更を追跡する場合は、 ファイルパターンを指定します(実際にはPerlの正規表現です)。たとえば、変更に関する情報を取得するには ファイルstyle.cssに対して行われたもの:
$ perl svn-commit-info.pl /svn/repos/test style.css
特定のリビジョンに関心がある場合は、3番目のパラメーターを指定できます。たとえば、すべての変更を印刷するには 「。」を考慮して、第3リビジョンのPerlの正規表現の任意の文字に一致します:
$ perl svn-commit-info.pl /svn/repos/test . 3
そしてもちろん、Unixフィルターとパイプラインのパワーを利用して、たとえば ユーザーDavidによって行われたすべての変更を検索します。
$ svn-commit-info.pl /svn/repos/test | grep David
サイズ<!> gt; = 1Mbで作成されたすべてのファイルを見つけるには:
$ svn-commit-info.pl /svn/repos/test | awk '$1 = "A" && $6 ~ /[0-9]/ && $6 >= 1024*1024'
このスクリプトは、標準のSubversionコマンド<!> quot; svnlook <!> quot;を使用します。それ以外は自己完結型です。そこ コマンドをビルドして<!> quot; svnlook <!> quotの出力を取得する2つのヘルパー関数です。そして、連続して呼び出します 出力を構成するコマンド。 Subversion <!> gt; = 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;
これがお役に立てば幸いです。長い投稿をお待ちしております。