タイムラインを生成するために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、2番目の列はUnixタイムスタンプで、その後に変更、挿入、削除されたファイルの数が表示されます。
これはバイナリも追跡しますが、これはもちろんストレージ設計の問題です。