2009-01-21 5 views
6

Chúng tôi đang trong quá trình chuyển sang SVN.Báo cáo nào có sẵn cho svn?

Thật không may cho chúng tôi, chúng tôi được kiểm toán theo định kỳ, nơi mà các kiểm toán viên yêu cầu các thông tin như:
Histories thay đổi các tập tin
Lịch sử truy cập vào SVN
file mới thêm
Những thay đổi trong các tập tin

Có một công cụ có thể sản xuất các báo cáo này cho chúng tôi (hoặc một số trong số này)?

+0

Trình theo dõi vấn đề nào bạn sử dụng? Thông thường, trình theo dõi vấn đề cung cấp một số báo cáo về repo. – Joshua

+0

Chúng tôi sử dụng trình theo dõi vấn đề được tạo tùy chỉnh, không tương thích với bất kỳ thứ gì. – Bravax

Trả lời

6

StatSVN là trình tạo báo cáo lật đổ trọng lượng nhẹ. http://www.statsvn.org/

  1. đầu tiên tạo ra các tập tin đăng nhập verbose - svn log

  2. chạy StatSVN, nó là một tập tin jar duy nhất.

StatSVN cung cấp một danh sách các số liệu:

  • mà tập tin được thay đổi nhiều nhất
  • bao nhiêu dòng được thêm
  • người đóng góp nhiều hơn
2

svn log là lệnh cơ bản để có được những thông tin liên quan đến tập tin bạn đang tìm kiếm ...

2

Bạn có thể có tất cả các thông tin mà chỉ thông qua các bản ghi phiên bản SVN. Bạn có thể muốn xem xét một công cụ tốt đẹp như Fisheye để làm điều đó cho bạn mặc dù.

0

Hãy xem codesaga. Nó làm cho một công việc tốt của hình dung các cam kết kiểm soát nguồn. Tôi không thể xác minh cho phần báo cáo.

0

Chương trình này có thể giúp bạn ra ngoài, không phải với kiểm toán, nhưng bản cập nhật

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

  • Giám sát nguồn cho các sự kiện nhất định
  • Nhận thông báo dưới mọi hình thức (popup bóng, biểu tượng khay, email , âm thanh, ...) khi các sự kiện nhất định xảy ra
4

Trac (http://trac.edgewall.com) có thể được sử dụng để xem chi tiết SVN. Trac có các tính năng đẹp như một khung nhìn thay đổi cho phép thấy các thay đổi khác nhau (và chuyển qua lại giữa chúng). Nó cũng trình bày một giao diện đẹp hơn, tốt hơn nhiều so với ViewVC (www.viewvc.org)

+0

Ngoài ra, nó còn là một bộ theo dõi vấn đề và hệ thống quản lý dự án (phân công nhiệm vụ cho các mốc quan trọng, xây dựng lộ trình, v.v.). – stpe

2

SVN cung cấp phần lớn những gì bạn yêu cầu ngay từ dòng lệnh:

  • Lịch sử thay đổi cho một tập tin cụ thể/thư mục: svn log /your/path cung cấp cho bạn mã nguồn khác biệt, tác giả, ngày đăng ký, v.v.
  • Tệp mới được thêm: svnlook changed -r <rev> <path to repository> cung cấp cho bạn tất cả các tệp đã được chạm vào trong bản sửa đổi đã cho. Lặp lại tất cả các sửa đổi có liên quan và grep cho "A" biểu thị các tệp đã thêm.
  • Những thay đổi trong tập tin: svn diff -r <first rev>:<last rev> <path> mang đến cho bạn một diff của cho toàn bộ khoảng thời gian sửa đổi
  • Lịch sử truy cập vào SVN: SVN rõ ràng duy trì một bản ghi của tất cả các check-in (xem svn log). Đối với việc truy cập đọc, tôi không biết về một cơ chế nội trang, tuy nhiên bạn có thể tạo ra cơ chế của riêng bạn với ít nỗ lực, tùy thuộc vào cấu hình. Nếu bạn chỉ cho phép truy cập http, bạn có thể sử dụng tệp nhật ký của máy chủ web.

Nó không đẹp, nhưng đầu ra của SVN có cấu trúc cao để bạn có thể dễ dàng định dạng của riêng mình.

+0

svn log --xml cung cấp cho bạn một bản ghi đầy đủ đầu ra trong xml có thể dễ dàng hơn việc phân tích cú pháp văn bản miễn phí. – jdkoftinoff

0

Để xem các truy cập thực sự vào SVN, bạn cần phải phân tích cú pháp nhật ký máy chủ Apache (giả sử bạn đang phục vụ SVN qua Apache).

1

Dưới đây là một số điều tôi đã sử dụng trước đây để xem qua báo cáo và xu hướng hoạt động thay đổi.Lọc là không hoàn hảo, nhưng bạn có thể lấy ý tưởng:

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

bị ảnh hưởng Cấu hình Items:

%COMMAND% | find /c "/" 

changesets:

%COMMAND% | find /c "Changed paths" 

Danh sách các tập tin duy nhất mà đã bị ảnh hưởng hơn phạm vi sửa đổi đã cho (tôi đã cài đặt cygwin):

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

Câu hỏi này cũng hơi cũ, nhưng tôi đã tạo ra một kịch bản có thể hữu ích cho việc báo cáo/kiểm toán đơn giản của Subversion d để theo dõi các thay đổi được thực hiện cho một kho lưu trữ SVN và tôi muốn chia sẻ nó. Nó trích xuất thông tin về SVN cam kết theo cách tương tự với lệnh "svnlook" nhưng nó có một cặp lợi thế. Đầu tiên, nó cho phép lặp qua tất cả các phiên bản của một kho lưu trữ để theo dõi tất cả các thay đổi được thực hiện. Thứ hai, thông tin được in ở định dạng bảng được phân tách bằng tab (như trong các lệnh Unix như ps hoặc df), cả hai đều có thể đọc được và dễ phân tích hoặc nhập vào bảng tính, đây là điều tuyệt vời để báo cáo. Nó cũng có thể được gọi là hoặc được nhúng trong một móc đăng bài SVN.

Đây là một tập lệnh Perl có tên là svn-commit-info.pl và có ba đối số. Đầu tiên là đường dẫn kho lưu trữ và nó là bắt buộc. Thứ hai, tùy chọn, là mẫu tệp để tìm kiếm. Và thứ ba, cũng là tùy chọn, là số sửa đổi để truy vấn.

Nếu được thực hiện chỉ với đường dẫn lưu trữ, nó sẽ in ra thông tin STDOUT về các tệp bị ảnh hưởng bởi tất cả các cam kết được thực hiện trong kho lưu trữ. Ví dụ, giả sử các kho lưu trữ được lưu trữ trong/svn/Repos/kiểm tra trong máy chủ 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    

Các lĩnh vực tách biệt bởi tab là: các hoạt động biểu diễn, số phiên bản, ngày và thời gian, tác giả của bản sửa đổi, kích thước tệp tính bằng byte (trừ khi tệp là thư mục được đánh dấu bằng chuỗi "<DIR>") và đường dẫn của tệp bị ảnh hưởng trong kho lưu trữ . Ba dòng đầu tiên chứa ý kiến ​​định hướng của con người về đầu ra.

Đầu ra của lệnh cũ có thể mất nhiều thời gian để hoàn thành nếu kho lưu trữ lớn, có nhiều tệp hoặc sửa đổi. Nếu bạn muốn theo dõi các thay đổi được thực hiện cho một tệp cụ thể (hoặc tập hợp các tệp), thì tốt hơn là để chỉ định mẫu tệp (thực tế, đó là một regexp Perl). Ví dụ, để có được thông tin về những thay đổi thực hiện cho các tập tin style.css:

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

Nếu bạn quan tâm đến một phiên bản đặc biệt, bạn có thể chỉ định tham số thứ ba. Ví dụ để in tất cả các thay đổi của bản sửa đổi thứ ba, có tính đến '.' phù hợp với bất kỳ ký tự trong một biểu thức chính quy Perl:

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

Và tất nhiên bạn có thể khai thác sức mạnh của các bộ lọc Unix và pipelining để làm các truy vấn phức tạp hơn, ví dụ để tìm thấy tất cả những sửa đổi được thực hiện bởi người sử dụng David:

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

Để tìm tất cả các tập tin được tạo ra với kích thước> = 1Mb:

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

các kịch bản sử dụng lệnh Subversion tiêu chuẩn "svnlook "nhưng nếu không nó là khép kín. Có là hai hàm trợ giúp để xây dựng lệnh và nhận đầu ra của "svnlook" và sau đó kết nối các cuộc gọi liên tiếp đến lệnh để soạn kết quả đầu ra. Nó đòi hỏi Subversion> = 1.7 và nó có được thử nghiệm trên 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; 

Hy vọng điều này sẽ giúp và xin lỗi cho bài đăng dài.