2014-03-29 73 views
2

我想计算git之间的提交时间,这个(我希望)会给我一个粗略的测量结果。这可能吗?计算git提交之间的时间

+0

是的,这是可能的。试一试。 –

+0

如果要测量生产力,使用提交挂钩自动更新数据库或包含时间数据的csv文件可能是个不错的主意,后者可以稍后绘制。 –

回答

0

如果您可以将git log的输出发送到一个文件,那么您已经达到了一半。我不确定你最喜欢什么语言,但我知道在bash脚本中很容易做到。

+0

在结尾添加'--format =%ad'以大大简化过程。 – Eagerod

2

这将打印的新日提交其次是上了年纪的日期提交:

git log HEAD~[newer_commit] -n 1 --format=%ad; \ 
git log HEAD~[older_commit] -n 1 --format=%ad 

您将与日期字符串结束。使用任何你喜欢的语言来计算差异。

0

下面是使用bashdate进行此操作的更完整示例。

首先,在Git: want to iterate through all commits on branch, and list files in each commit指出:

git的转速名单将列出给出一个到达的所有版本提交按时间倒序排列,所以你可以通过它的一个分支的名字来获取列表分支头向后

所以,基本上,这个想法是,我使用rev-list向后通过回购的历史,从头部迭代,并在每次修订,得到当前的时间戳,和以前的时间戳提交;将它们作为UNIX时间戳,因为那样我们就可以在bash中直接进行整数运算(差异)最后使用date来显示日期。因此,这bash脚本是:

for ix in `git rev-list master`; do 
    thists=`git log $ix -n 1 --format=%ct`; 
    prevts=`git log $ix~1 -n 1 --format=%ct 2>/dev/null`; 
    if [ ! -z "$prevts" ] ; then 
    delta=$(($thists - $prevts)); 
    echo `date -d @$thists +'%Y-%m-%d %H:%M:%S'` "-->" \ 
     `date -d @$prevts +'%Y-%m-%d %H:%M:%S'` " ;= " \ 
     `date -d @$delta +'%H:%M:%S'`; 
    fi; 
done 

注意,当你在第一次提交,没有前/父提交,所以git log将失败:fatal: ambiguous argument '45e95c7...~1': unknown revision or path not in the working tree.;为避免打印此消息,我将stderr重定向至命令中的/dev/null,然后仅在prevts不为空时才执行时间增量计算。从这个脚本的输出是这样的:

2017-08-27 09:44:04 --> 2017-08-26 17:12:22 ;= 17:31:42 
2017-08-26 17:12:22 --> 2017-08-26 16:48:24 ;= 01:23:58 
2017-08-26 16:48:24 --> 2017-08-26 16:28:05 ;= 01:20:19 
... 

然而,这些增量是一个小时 - 这样的时间差的更正确的显示,我用Python的datetime.timedelta - 所以在上面的脚本,你可能要替换的`date -d @$delta +'%H:%M:%S'`;行:

  `python -c "import datetime as dt; d = dt.timedelta(seconds=$delta); print(d)"` 

...在这种情况下,产生此日志:

2017-08-27 09:44:04 --> 2017-08-26 17:12:22 ;= 16:31:42 
2017-08-26 17:12:22 --> 2017-08-26 16:48:24 ;= 0:23:58 
2017-08-26 16:48:24 --> 2017-08-26 16:28:05 ;= 0:20:19 
...