Domanda

Stiamo per passare a SVN.

Sfortunatamente per noi, siamo periodicamente controllati, dove i revisori richiedono informazioni come:
Storie di modifiche ai file
Storia dell'accesso a SVN
Nuovi file aggiunti
Modifiche nei file

Esiste uno strumento in grado di produrre questi report per noi (o alcuni di questi)?

È stato utile?

Soluzione

StatSVN è un generatore di report di sovversione leggero. http://www.statsvn.org/

  1. genera prima il file di registro dettagliato - svn log

  2. esegui <=> , è un singolo file jar.

<=> fornisce un elenco di metriche:

  • quale file viene modificato di più
  • quante righe vengono aggiunte
  • chi sta contribuendo di più

Altri suggerimenti

Trac ( http://trac.edgewall.com ) può essere utilizzato per visualizzare i dettagli SVN. Trac ha delle belle funzionalità come una vista del changeset che permette di vedere diversi changeset (e di andare avanti o indietro tra loro). Presenta anche una bella interfaccia utente, molto meglio di ViewVC (www.viewvc.org)

svn log è il comando di base per ottenere il file correlato informazioni che stai cercando ...

Puoi avere tutte queste informazioni solo attraverso i log di revisione SVN. Potresti prendere in considerazione un bel strumento come Fisheye per farlo per te.

SVN fornisce gran parte di ciò che chiedi direttamente dalla riga di comando:

  • Cronologia delle modifiche a un file / directory specifici: svn log /your/path fornisce differenze nel codice sorgente, autori, date di check-in ecc.
  • Nuovi file aggiunti: svnlook changed -r <rev> <path to repository> ti dà tutti i file che sono stati toccati nella revisione data. Passa sopra tutte le revisioni pertinenti e grep per & Quot; A & Quot; che indica i file aggiunti.
  • Modifiche ai file: svn diff -r <first rev>:<last rev> <path> ti offre una diff per l'intero arco di revisioni
  • Storia dell'accesso a SVN: SVN mantiene ovviamente un registro di tutti i check-in (vedi svn log). Per quanto riguarda l'accesso in lettura, non conosco un meccanismo incorporato, tuttavia è possibile crearne uno proprio con poco sforzo, a seconda della configurazione. Se consenti solo l'accesso http, puoi utilizzare i file di registro del server web.

Non è carino, ma l'output di SVN è altamente strutturato in modo da poter eseguire facilmente la propria formattazione.

Eccone alcuni che ho usato in precedenza per dare un'occhiata ai rapporti sulle attività di cambiamento e alle tendenze. Il filtro non è perfetto, ma puoi avere l'idea:

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

Elementi di configurazione interessati:

%COMMAND% | find /c "/"

Cambiet:

%COMMAND% | find /c "Changed paths"

Elenco di file univoci che sono stati interessati nell'intervallo di revisione specificato (avevo installato cygwin):

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

Dai un'occhiata a codesaga . Fa un buon lavoro di visualizzazione degli commit del controllo del codice sorgente. Non posso garantire per la parte di segnalazione.

Questo programma potrebbe aiutarti, non con audit, ma con aggiornamenti

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

  • Monitora la fonte per determinati eventi
  • Ricevi notifiche di qualsiasi tipo (popup a fumetto, icone nella barra delle applicazioni, e-mail, suoni, ...) quando si verificano determinati eventi

Per vedere gli accessi effettivi a SVN, dovresti analizzare i log del server Apache (supponendo che stai servendo SVN su Apache).

Anche questa domanda è un po 'vecchia, ma ho creato uno script che può essere utile per il semplice reporting / controllo di Subversion e per tenere traccia delle modifiche apportate a un repository SVN e volevo condividerlo. Estrae le informazioni su SVN si impegnano in modo simile al comando " svnlook " ma ha un paio di vantaggi. Innanzitutto, consente di scorrere su tutte le revisioni di un repository per tenere traccia di tutte le modifiche apportate. In secondo luogo, il le informazioni sono stampate in un formato tabulare separato da tabulazioni (come nei comandi Unix come ps o df) che è sia leggibile dall'uomo che facile da analizzare o importare in un foglio di calcolo, il che è ottimo per i rapporti. Può anche essere chiamato o incorporato in un hook post-commit SVN.

È uno script Perl chiamato svn-commit-info.pl e accetta tre argomenti. Il primo è il percorso del repository ed è obbligatorio. Il secondo, facoltativo, è il modello di file da cercare. E il terzo, anche facoltativo, è il numero di revisione da interrogare.

Se eseguito solo con il percorso del repository, stampa su STDOUT informazioni sui file interessati da tutto il file esegue il commit nel repository. Ad esempio, supponendo che il repository sia archiviato in / svn / repos / test in Server 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            

I campi separati da tabulazione sono: l'operazione eseguita, il numero di revisione, la data e l'ora, l'autore della revisione, il dimensione del file in byte (a meno che il file non sia una directory contrassegnata dalla stringa " < DIR > ") e dal percorso del file interessato nel repository. Le prime tre righe contengono commenti orientati all'uomo sull'output.

Il completamento dell'output del comando precedente può richiedere molto tempo se il repository è grande, con molti file o revisioni. Se vuoi tenere traccia delle modifiche apportate a un determinato file (o un set di file), è meglio per specificare il modello di file (che, in realtà, è una regexp Perl). Ad esempio, per ottenere informazioni sulle modifiche creato nel file style.css:

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

Se sei interessato a una particolare revisione, puoi specificare il terzo parametro. Ad esempio per stampare tutte le modifiche della terza revisione, tenendo conto che "." corrisponde a qualsiasi personaggio in un'espressione regolare Perl:

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

E, naturalmente, potresti sfruttare la potenza dei filtri e del pipelining Unix per eseguire query più complesse, ad esempio per trova tutte le modifiche apportate dall'utente David:

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

Per trovare tutti i file creati con dimensione > = 1Mb:

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

Lo script utilizza il comando Subversion standard " svnlook " ma per il resto è autonomo. Là sono due funzioni di supporto per creare il comando e ottenere l'output di " svnlook " e quindi effettua chiamate successive a il comando per comporre l'output. Richiede Subversion & Gt; = 1.7 e ha stato testato su 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;

Spero che questo aiuti e scusa per il lungo post.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top