我想从我的 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 时间戳,后面是更改、插入和删除的文件数。
这也跟踪您的二进制文件,但这当然是您的存储库设计的问题......