Вопрос

Мы находимся в процессе перехода на SVN.

К сожалению для нас, нас периодически проверяют, и аудиторам требуется такая информация, как:
Истории изменений файлов
История доступа к SVN
Добавлены новые файлы
Изменения в файлах

Есть ли инструмент, который может создавать для нас эти отчеты (или некоторые из них)?

Это было полезно?

Решение

StatSVN это легкий генератор отчетов о подрывной деятельности.http://www.statsvn.org/

  1. сначала создайте подробный файл журнала - svn log

  2. бегать StatSVN , это один файл jar.

StatSVN предоставляет список показателей:

  • какой файл изменен больше всего
  • сколько строк добавлено
  • кто вносит больше

Другие советы

Trac ( http://trac.edgewall.com ) можно использовать для просмотра сведений о SVN. Trac имеет приятные функции, такие как просмотр наборов изменений, который позволяет просматривать различные наборы изменений (и просматривать их). Он также представляет приятный интерфейс, гораздо лучше, чем ViewVC (www.viewvc.org)

svn log - основная команда для получения файла, связанного с информация, которую вы ищете ...

Вы можете получить всю эту информацию только через журналы изменений SVN. Возможно, вы захотите воспользоваться хорошим инструментом, таким как Fisheye , чтобы сделать его для вас.

SVN предоставляет многое из того, что вы запрашиваете, прямо из командной строки:

  • История изменений конкретного файла/каталога: svn log /your/path дает вам различия в исходном коде, авторов, даты регистрации и т. д.
  • Добавлены новые файлы: svnlook changed -r <rev> <path to repository> дает вам все файлы, которые были затронуты в данной версии.Переберите все соответствующие версии и grep для «A», обозначающего добавленные файлы.
  • Изменения в файлах: svn diff -r <first rev>:<last rev> <path> дает вам разницу для всего диапазона ревизий
  • История доступа к SVN:SVN, очевидно, ведет журнал всех проверок (см. svn log).Что касается доступа для чтения, я не знаю встроенного механизма, однако вы, вероятно, можете без особых усилий создать свой собственный, в зависимости от конфигурации.Если вы разрешаете доступ только по протоколу HTTP, вы можете использовать файлы журналов веб-сервера.

Это некрасиво, но вывод 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 (при условии, что вы обслуживаете SVN поверх Apache).

Этот вопрос также немного устарел, но я создал скрипт, который может быть полезен для простой отчетности / аудита Subversion и для отслеживания изменений, внесенных в репозиторий SVN, и я хотел поделиться им. Извлекает информация о SVN фиксируется аналогично команде " svnlook " но у него есть пара преимуществ. Во-первых, он позволяет перебирать все ревизии репозитория, чтобы отслеживать все сделанные изменения. Во-вторых, информация печатается в табличном формате, разделенном табуляцией (как в командах Unix, таких как ps или df), который удобен для чтения человеком и его легко анализировать или импортировать в электронную таблицу, которая отлично подходит для создания отчетов. Это также можно назвать или встроен в зацепку SVN после фиксации.

Это Perl-скрипт с именем svn-commit-info.pl, который принимает три аргумента. Первый путь к хранилищу и это обязательно. Второй, необязательный, шаблон файла для поиска. И третий, также необязательный, является номер редакции для запроса.

Если выполняется только с путем к хранилищу, он печатает в 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            

Разделенные табуляцией поля: выполненная операция, номер редакции, дата и время, автор редакции, размер файла в байтах (если файл не является каталогом, помеченным строкой " < 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

Чтобы найти все файлы, созданные с размером > = 1 МБ:

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

Сценарий использует стандартную команду Subversion " svnlook " но в остальном он самодостаточен. Там две вспомогательные функции для сборки команды и получения вывода " svnlook " а затем делает последовательные звонки команда для составления вывода. Это требует 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;

Надеюсь, это поможет и извините за длинный пост.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top