2014-03-29 139 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 
...