【发布时间】:2016-06-16 14:12:03
【问题描述】:
我有一个名为development 的分支。现在我想知道每天(即每天)发生了多少次提交。
我想要提交的总次数(即一天内的提交次数。
我试过这个命令,但它从分支中计算所有提交
git shortlog -s -n
我的问题是统计一天的提交次数
【问题讨论】:
我有一个名为development 的分支。现在我想知道每天(即每天)发生了多少次提交。
我想要提交的总次数(即一天内的提交次数。
我试过这个命令,但它从分支中计算所有提交
git shortlog -s -n
我的问题是统计一天的提交次数
【问题讨论】:
我试过了:
git 日志 | grep 日期 | awk '{打印" : "$4" "$3" "$6}' | uniq -c
而且它有效。你会得到类似的东西:
5 : 3 Mar 2016
4 : 2 Mar 2016
8 : 1 Mar 2016
[...]
我找到了命令here。
【讨论】:
git log,而不是每次提交所需的最小值。此外,您不要 sort,这可能会导致 uniq 返回糟糕的结果和/或对您大喊大叫,因为作者(您在此处显示的内容)和提交日期都不需要按时间顺序排列。
试试这个:
$ git rev-list --count --since=<start-date> --before=<end-date> <ref>
例如,要获取当前分支中昨天完成的提交次数:
$ git rev-list --count --since=yesterday --before=today HEAD
也接受绝对日期:
$ git rev-list --count --since=2016-03-02 --before=2016-03-03 HEAD
【讨论】:
这回答了所问问题的“每天”方面,它似乎无法决定是要“每天”表示多个还是仅“一天”表示单一。 ;-) 显然,“per day”是“a day”的超集,所以这对展示很有用; grep 剩下的就可以了!
又短又甜:
git log --date=short --pretty=format:%ad | sort | uniq -c
示例输出:
1 2017-12-08
6 2017-12-26
12 2018-01-01
13 2018-01-02
10 2018-01-14
7 2018-01-17
5 2018-01-18
解释:
git log 显然是一个先决条件。--date=short 将我们的 date-format 设置为 YYYY-MM-DD,这 (A) 是我们所需要的, (B) 随后将按字母顺序将 sort 按时间顺序排列。--pretty=format:%ad 告诉git,我们只想在我们首选的date-format 中获取每个提交的aauthor date。如果你愿意,你可以使用cd 代替commit date,但是一旦你使用cherry-pick、rebase 等,它的用处就会大大降低。uniq 需要 | sort,因为它只检查相邻的重复项。当然,我们几乎可以肯定无论如何都希望日期排在最后。| uniq -c 计算每个 YYYY-MM-DD 的相邻重复项的数量,并将其添加到日期之前。喜剧奖励:如果您希望将其作为制表符分隔的日期然后计数,以便输入到图形引擎或类似引擎中,那么只需将上述结果输入
sed 's:^ *\([1-9][0-9]*\) \([1-9][0-9-]*\)$:\2\t\1:g'
就这么简单……!
或者,通过使用awk 而不是sed 来避免发疯:
awk 'BEGIN{OFS = "\t"} {print $2, $1}'
【讨论】: