타임라인 통계를 위해 git 사용하기

타임라인 통계를 위해 git 사용하기

타임라인을 생성하기 위해 git 저장소에서 통계를 생성하고 싶습니다.

<commit> <timestamp> <changed-lines>

35abf648cfc  2011-04-04t17:23:58  +20 -4
93acb668f32  2011-04-04t17:59:01  -4 +1

그래서 gnuplot 등을 사용하여 "예쁜" 그래프를 그릴 수 있습니다. 그 안에는 <changed-lines>빌드 가능한 모든 것이 있을 수 있습니다 +20 -3(예: 20개 행 추가, 3개 행 삭제) 23. 중요한 것은철사계산됩니다. 변경된 파일은 내 시나리오에서 사용되지 않습니다.

적용할 수만 있다면부분일부 디렉토리에는 통계를 손상시키는 불쾌한 바이너리가 포함되어 있기 때문입니다.

어떻게든 들어갈 수 있을 것 같은데 git log어디서부터 시작해야 할지 모르겠어요...

답변1

이 줄은 원하는 내용에 가깝습니다.

$ git log --format="%h %ad" --numstat
b29dfc1 Sun Apr 24 13:32:06 2011 +0200
3       0       bar
0       2       foo

d552271 Sun Apr 24 13:21:16 2011 +0200
2       1       foo

ac8894a Sun Apr 24 13:20:59 2011 +0200
1       0       foo

5965384 Sun Apr 24 13:20:40 2011 +0200
1       0       bar
1       0       foo

읽다git log 매뉴얼 페이지더 많은 정보를 알고 싶습니다.

답변2

작업을 수행하는 스마트 Perl 스크립트가 있습니다.

#!/usr/bin/perl -w

use warnings;
use strict;
use Date::Parse;

my $out = "";
while (<>)
{
    chomp (my $line = $_);
    $out .= $1 if ($line =~ m/^commit ([a-z0-9]+)$/);
    $out .= "\t" . str2time($1) if ($line =~ m/^Date: (.+)$/);
    if ($line =~ m/ (\d+) files changed, (\d+) insertions\(\+\), (\d+) deletions\(-\)/)
    {
        print $out . "\t" . $1 . "\t" . $2 . "\t" . $3 . "\n";
        $out = "";
    }
}

print $out."\n";

실행 가능하도록 권한을 변경하고 출력을 git log --shortstat이 스크립트로 파이프하면 됩니다(스크립트는 여기에 저장됨 /tmp/gitstats.pl).

user@srv % git log --shortstat | /tmp/gitstats.pl
d56d496ac70f6c441d624413f54aeba1dfb805d7        1303393788      104     51420   12081
98c4b66af7a0c7e6b8155bb2a538f7ca77c1243a        1303285305      234     34756   35022
6e33280279d5bd83ea8d0fde95b08394a297b159        1303251405      6       341     0
[...]

첫 번째 열은 커밋 ID이고, 두 번째 열은 Unix 타임스탬프이며, 그 뒤에 변경, 삽입 및 삭제된 파일 수가 표시됩니다.

이는 바이너리도 추적하지만 이는 물론 저장소 설계의 문제입니다.

관련 정보