타임라인을 생성하기 위해 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 타임스탬프이며, 그 뒤에 변경, 삽입 및 삭제된 파일 수가 표시됩니다.
이는 바이너리도 추적하지만 이는 물론 저장소 설계의 문제입니다.