使用 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 日志手册页了解更多信息。

答案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 时间戳,后面是更改、插入和删除的文件数。

这也跟踪您的二进制文件,但这当然是您的存储库设计的问题......

相关内容