문제

우리는 프로세스에서의 이동을 SVN.

불행히도 우리를 위해,우리는 감사를 정기적으로는 감사를 필요한 정보를 다음과 같:
기록의 변화를 파일
역사로의 접근을 SVN
새로운 파일을 추가
변화에서 파일

이 있는 도구를 생성할 수 있는 이러한 보고서는 우리를 위해(또는 이들 중 일부)?

도움이 되었습니까?

해결책

StatSVN 가벼운 중량 전복 보고서 생성기입니다.http://www.statsvn.org/

  1. 먼저 Verbose Log 파일을 생성합니다. svn log

  2. 운영 StatSVN , 단일 항아리 파일입니다.

StatSVN 메트릭 목록을 제공합니다.

  • 어떤 파일이 가장 변경되었는지
  • 몇 줄이 추가되었습니다
  • 누가 더 기여하고 있습니다

다른 팁

트랙 (TRAC)http://trac.edgewall.com) SVN 세부 사항을 보는 데 사용할 수 있습니다. TRAC에는 다른 변경 사항을 볼 수있는 변경 사항 뷰와 같은 멋진 기능이 있습니다. 또한 ViewVC보다 훨씬 낫습니다 (www.viewvc.org).

SVN 로그 원하는 파일 관련 정보를 얻는 기본 명령입니다 ...

SVN 개정 로그를 통해 모든 정보를 가질 수 있습니다. 멋진 도구를 고려하고 싶을 수도 있습니다 어항 그래도 당신을 위해 그것을하기 위해.

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 액세스 만 허용하는 경우 Webserver의 로그 파일을 사용할 수 있습니다.

예쁘지는 않지만 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을 제공한다고 가정).

이 질문은 약간 오래된,그러나 나는 조용으로 사용할 수 있는 간단한 보고서/감사의 파괴 및 추적의 변경 사항을 SVN 저장소 및을 공유하고 싶습니다.추출 에 대한 정보를 SVN 범와 유사한 방법으로 명령"svnlook"그러나 그는 한 쌍의 이점이 있습니다.첫째로,그것은 반복을 통해 모든 수정의 저장소에 추적을 유지하의 모든 변경 사항을 만들어진다.둘째, 정보가 인쇄 탭으로 구분된 형식으로(으로 유닉스에서와 같은 명령 ps 또는 df)는 모두 인간의 읽기 쉽게 구문 분석하거나 스프레드 시트로 가져올 수있는,대한 보고입니다.그것은 또한 수라이나 에 포함 SVN post-commit 후크.

It is a Perl 스크립트라고 svn-commit-info.pl 고 세 arguments.첫 번째 저장소 경로 그것은 필수입니다.두 번째,선택 사항은 패턴 파일을 검색합니다.그리고,세 번째는 또한 선택입니다 개정 번호를 쿼리가 있습니다.

실행된 경우에만 저장소 경로,그것을 인쇄하는 표준출력에 대한 정보를 파일에 의해 영향을 받은 모든 커밋을 만들어합니다.예를 들어,가정의 저장소에 저장됩/svn/repos/에서 테스트 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            

의 탭으로 구분된 필드:작업을 수행,개정 번호,날짜 및 시간,저자의 개정, 파일의 크기를 바이트(하지 않는 파일이 디렉토리에 의해 표시 문자열"<DIR>")및 경로의 영향을 받는 파일에 장합니다.첫 번째 세선을 포함하는 인간의 중심에 대한 의견을 출력한다.

출력 전자의 명령할 수 있는 시간이 오래 걸릴를 완료하면 저장소가 크고,많은 파일이나 할 수 있습니다.을 유지하려는 경우 추적 변경 내용이 특정 파일(혹은 파일),그것은 더 나은 을 지정하는 파일의 패턴(는,사실,Perl regexp).예를 들어,에 대한 정보를 얻기 위해 변경 파일에서 스타일입니다.css:

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

에 관심이 있다면 특정한 개정을 지정할 수 있습니다 세 번째 매개 변수입니다.예를 들어 인쇄해 모든 변경 사항 의 세 번째 개정판 계정으로는'.'경기에서 모든 문자는 Perl 정규 표현식

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

그리고 물론 당신 능력을 활용 할 수 있습 유닉스의 필터와 파이프라인을 더 복잡한 쿼리를 예를 들어, 모든 수정은 사용자가 데이비드:

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

하는 모든 파일을 찾을 만들어진 크기>=1Mb:

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

스크립트를 사용하는 표준이 파괴 명령"svnlook"하지만 그렇지 않으면 그것은 자기가 포함되어 있습니다.가 은 두 개의 도우미 기능을 구축하는 명령을 얻을 출력의"svnlook"그리고 가 연속적인 통화 이 명령을 구성하는 출력된다.그것은 필요 Subversion>=1.7 고 에서 테스트되었습니다 Perl5.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