Frage

Wir sind im Prozess SVN zu bewegen.

Leider für uns, wir werden in regelmäßigen Abständen überprüft, in denen die Prüfer Informationen benötigen wie:
Geschichten von Änderungen an Dateien
Geschichte des Zugangs zum SVN
Neue Dateien hinzugefügt
Änderungen in Dateien

Gibt es ein Tool, das diese Berichte für uns (oder einige davon) produzieren kann?

War es hilfreich?

Lösung

StatSVN ist ein geringeres Gewicht Subversion Report-Generator. http://www.statsvn.org/

  1. zunächst die ausführliche Protokolldatei erzeugen - svn log

  2. StatSVN , es ist eine einzige JAR-Datei.

StatSVN enthält eine Liste von Metriken:

  • , welche Datei geändert wird, um die meisten
  • , wie viele Zeilen hinzugefügt
  • , die trägt mehr

Andere Tipps

Trac ( http://trac.edgewall.com ) können die SVN Details anzuzeigen verwendet werden. Trac hat nette Features wie eine changeset Ansicht, die verschiedenen Change sehen kann (und vor oder zurück durch sie gehen). Es stellt auch eine schöne Benutzeroberfläche, viel besser als ViewVC (www.viewvc.org)

svn log der Grundbefehl ist die Datei mit Bezug zu bekommen Informationen Sie suchen ...

können Sie haben all diese Informationen nur durch die SVN Revision Protokolle. Sie könnten ein schönes Tool wie Fisheye zu tun es für Sie aber betrachten.

bietet SVN viel von dem, was Sie fragen Sie nach rechts von der Befehlszeile:

  • Die Geschichte von Änderungen an einer bestimmten Datei / Verzeichnis. svn log /your/path gibt Ihnen Quellcode diffs, Autoren, Check-in Daten usw.
  • Neue Dateien hinzugefügt: svnlook changed -r <rev> <path to repository> gibt Ihnen alle Dateien, die in der angegebenen Revision berührt wurden. Schleife über alle relevanten Änderungen und grep für „A“, die hinzugefügten Dateien bezeichnet.
  • Änderungen in Dateien: svn diff -r <first rev>:<last rev> <path> gibt Ihnen einen Diff für die gesamte Spanne von Revisionen
  • Geschichte des Zugangs zum SVN: SVN offensichtlich ein Protokoll aller Check-In unterhält (siehe svn log). Wie für den Zugang zu lesen, weiß ich nicht, einen eingebauten Mechanismus, jedoch können Sie wahrscheinlich Ihre eigene mit wenig Aufwand erstellen, abhängig von der Konfiguration. Wenn Sie nur die HTTP-Zugriff ermöglichen, können Sie die Webserver-Protokolldateien verwenden.

Es ist nicht schön, aber SVN des Ausgang ist sehr strukturiert, so dass Sie Ihre eigene Formatierung leicht tun können.

Hier sind einige, die ich verwendet habe, einen Blick auf Veränderung Aktivitätsberichte und Trends zu geben. Die Filterung ist nicht perfekt, aber man kann auf die Idee kommen:

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].\/"

Betroffene Konfigurationselemente:

%COMMAND% | find /c "/"

Change:

%COMMAND% | find /c "Changed paths"

Liste der einzigartigen Dateien, die über den gegebenen Revisionsbereich betroffen waren (ich hatte Cygwin installiert ist):

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

Hier finden Sie aktuelle codesaga . Es macht einen guten Job Source-Control-Commits zu visualisieren. Ich kann nicht für die Berichterstattung Teil bürgen.

Dieses Programm könnte Ihnen helfen, aus, nicht mit Audits, aber Updates

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

  • Überwachen Sie die Quelle für bestimmte Ereignisse
  • Sie erhalten Benachrichtigungen aller Art (Ballon Pop-ups, Tray-Icons, E-Mail, Sounds, ...), wenn bestimmte Ereignisse auftreten

Um tatsächlichen Zugriffe auf SVN zu sehen, dann würden Sie die Apache-Server-Protokolle analysieren müssen (vorausgesetzt, Sie SVN über Apache sind dient).

Diese Frage ist auch ein bisschen alt, aber ich habe ein Skript gefertigt, die für ein einfaches Reporting / Auditing von Subversion nützlich sein können und den Überblick über die Änderungen an einem SVN-Repository gemacht zu halten, und ich wollte es teilen. es extrahiert Informationen über SVN verpflichtet in ähnlicher Weise zu dem Befehl „svnlook“, aber es hat ein Paar von Vorteilen. Erstens ermöglicht es alle Überarbeitungen eines Endlagers iterieren, um zu verfolgen alle vorgenommenen Änderungen. Zweitens ist die Information wird in einem Register getrennten tabellarischen Format gedruckt werden (wie in Unix wie ps Befehle oder df) aufweist, die sowohl für Menschen lesbaren und leicht zu analysieren oder in eine Tabelle zu importieren, die für die Meldung groß ist. Es kann auch genannt werden, oder eingebettet in einem SVN-post-commit Haken.

Es ist ein Perl-Skript namens svn-commit-info.pl und nimmt drei Argumente. Die erste ist die Repositorypfad und es ist zwingend erforderlich. Die zweite, optional ist das Dateimuster zu suchen. Und die dritte, ebenfalls optional ist die Revisionsnummer abgefragt werden.

Wenn nur mit dem Repository-Pfad ausgeführt wird, druckt er auf STDOUT Informationen über die betroffenen Dateien von allen verpflichtet sich im Repository gemacht. Zum Beispiel des Repository unter der Annahme in / svn / repos / test in der gespeicherte Subversion-Server:

$ 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            

Die Registerkarte getrennten Felder sind: die Operation ausgeführt, die Revisionsnummer, Datum und Uhrzeit, der Autor der Revision, die Dateigröße in Byte (es sei denn, die Datei ist ein Verzeichnis, das durch die Zeichenfolge „

“ gekennzeichnet) und der Pfad der betroffenen Datei in der Repository. Die ersten drei Zeilen enthalten menschliche orientierte Kommentare über die Ausgabe.

Der Ausgang des früheren Befehls kann eine lange Zeit in Anspruch nehmen, wenn das Repository groß, mit vielen Dateien oder Revisionen. Wenn Sie den Überblick über die Änderungen an einer bestimmten Datei (oder eine Gruppe von Dateien) hergestellt behalten mögen, ist es besser, das Dateimuster zu spezifizieren (das in der Tat ist ein Perl regexp). Zum Beispiel können Informationen über die Änderungen zu erhalten gemacht in der Datei style.css:

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

Wenn Sie Interesse an einer bestimmten Revision sind, können Sie den dritten Parameter angeben. Zum Beispiel, alle Änderungen drucken die dritten Revision, unter Berücksichtigung, dass ‚‘ jedes Zeichen in einem regulären Perl-Ausdruck:

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

Und natürlich könnte man die Macht des Unix-Filter und Pipelining nutzt komplexere Abfragen zu tun, zum Beispiel zu finden Sie alle vorgenommenen Änderungen durch den Benutzer David:

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

Um alle Dateien mit einer Größe von> = 1 MB erstellt zu finden:

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

Das Skript verwendet den Standard Subversion Befehl „svnlook“ aber ansonsten ist es eigenständig. Dort sind zwei Hilfsfunktionen den Befehl und erhalten die Ausgabe von „svnlook“ und dann erzielt aufeinanderfolgende Aufrufe zu bauen der Befehl den Ausgang zu komponieren. Es erfordert Subversion> = 1,7, und es hat wurde auf Perl 5.10 getestet.

#!/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;

Hope, das hilft und sorry für den langen Post.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top