Pergunta

Estamos no processo de mudança para SVN.

Infelizmente para nós, são auditadas periodicamente, onde os auditores exigem informações como:
Histórias de alterações em arquivos
História de acesso ao SVN
Novos arquivos Adicionado
Alterações em arquivos

Existe uma ferramenta que pode produzir esses relatórios para nós (ou alguns deles)?

Foi útil?

Solução

StatSVN é um gerador de relatórios subversão peso leve. http://www.statsvn.org/

  1. primeira gerar o detalhado arquivo de log - svn log

  2. StatSVN , é um único arquivo jar.

StatSVN fornece uma lista de métricas:

  • qual arquivo é alterado o mais
  • quantas linhas são adicionadas
  • que está contribuindo mais

Outras dicas

Trac ( http://trac.edgewall.com ) pode ser usado para visualizar os detalhes do SVN. Trac tem características interessantes como uma visão de alterações que permite ver diferentes changesets (e voltar ou adiante através deles). Ele também apresenta uma interface de usuário agradável, muito melhor do que ViewVC (www.viewvc.org)

svn log é o comando básico para obter o arquivo relacionado informações que você está procurando ...

Você pode ter todas essas informações apenas através dos registros de revisão SVN. Você pode querer considerar uma boa ferramenta como Fisheye para fazê-lo para você embora.

SVN fornece muito do que você perguntar para a direita na linha de comando:

  • História de mudanças para um arquivo específico / diretório:. svn log /your/path lhe dá diffs código-fonte, autores, check-in datas etc
  • Novos arquivos adicionados: svnlook changed -r <rev> <path to repository> dá-lhe todos os arquivos que foram tocados na revisão dado. Loop sobre todas as revisões relevantes e grep para "A" que denota arquivos adicionados.
  • Alterações em arquivos: svn diff -r <first rev>:<last rev> <path> dá-lhe um diff por toda a extensão das revisões
  • História de acesso ao SVN: SVN, obviamente, mantém um registro de todos os check-ins (veja svn log). Como para a leitura de acesso, eu não sei de um mecanismo incorporado, no entanto, você provavelmente pode criar o seu próprio com pouco esforço, dependendo da configuração. Se você só permitir acesso HTTP, você pode usar arquivos de log do servidor web.

Não é bonito, mas a saída do SVN é altamente estruturado para que você possa fazer a sua própria formatação facilmente.

Aqui estão alguns que eu usei antes de dar uma olhada no relatório de actividade mudança e tendências. A filtragem não é perfeito, mas você pode obter a idéia:

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

Itens de Configuração Afetados:

%COMMAND% | find /c "/"

Changesets:

%COMMAND% | find /c "Changed paths"

Lista de arquivos originais que foram afetados pela determinado intervalo de revisão (eu tinha cygwin instalado):

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

Dê uma olhada codesaga . Ele faz um bom trabalho de visualizar commits de controle de origem. Eu não posso garantir para a parte de relatório.

Este programa pode ajudá-lo, não com auditorias, mas atualizações

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

  • Monitor de origem para determinados eventos
  • Receber notificações de qualquer tipo (popups balão, ícones da bandeja, e-mail, sons, ...) quando certos eventos ocorrem

Para ver acessos reais para SVN, você precisa analisar os logs do servidor Apache (supondo que você está servindo SVN sobre Apache).

Esta questão também é um pouco velho, mas eu criei um script que pode ser útil para simples relatórios / auditoria de Subversion e de manter o controle das alterações feitas em um repositório SVN e eu queria compartilhá-lo. ele extrai informações sobre SVN compromete de forma semelhante ao "svnlook" de comando, mas tem um par de vantagens. Primeiro, ele permite para iterar sobre todas as revisões de um repositório para manter o controle de todas as alterações feitas. Em segundo lugar, o a informação é impressa num formato tabular separados-guia (como em comandos Unix, como ps ou DF), que é ao mesmo tempo legível e fácil de analisar ou para importação para uma folha de cálculo, o que é excelente para a comunicação. Ele também pode ser chamado ou incorporado em um SVN post-commit gancho.

É um script Perl chamado svn-commit-info.pl e leva três argumentos. O primeiro é o caminho do repositório e é obrigatório. O segundo, opcional, é o padrão de arquivo para pesquisa. E o terceiro, também opcional, é o número de revisão para consulta.

Se executado apenas com o caminho do repositório, ele imprime à informação STDOUT sobre os arquivos afetados por toda a compromete feita no repositório. Por exemplo, assumindo que o repositório é armazenado em / svn / repos / teste no servidor 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            

Os campos separados por tabulação são: a operação realizada, o número de revisão, a data ea hora, o autor da revisão, o tamanho do arquivo em bytes (a menos que o arquivo é um diretório marcado pela string "

") eo caminho do arquivo afetado no repositório. As três primeiras linhas contêm orientada humanos comentários sobre a saída.

A saída do comando anterior pode levar um longo tempo para concluir se o repositório é grande, com muitos arquivos ou revisões. Se você quiser manter um registro das alterações feitas em um arquivo particular (ou um conjunto de arquivos), é melhor para especificar o padrão de arquivo (que, na verdade, é uma expressão regular Perl). Por exemplo, para obter informações sobre as alterações feito para o style.css arquivo:

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

Se você está interessado em uma revisão particular, você pode especificar o terceiro parâmetro. Por exemplo, para imprimir todas as mudanças da terceira revisão, tendo em conta que ''. corresponde a qualquer caractere em uma expressão regular Perl:

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

E, claro, você pode aproveitar o poder de filtros Unix e canalizando para fazer consultas mais complexas, por exemplo, para encontrar todas as modificações feitas pelo usuário David:

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

Para encontrar todos os arquivos criados com tamanho> = 1Mb:

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

O script usa o comando Subversion "svnlook" padrão, mas caso contrário, é auto-contido. Lá são duas funções auxiliares para construir o comando e obter a saída do "svnlook" e, em seguida, mades chamadas sucessivas para o comando para compor a saída. Ela exige Subversion> = 1.7 e tem foi testada em 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;

Espero que isso ajude e desculpe pelo longo post.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top