一天的 Git 提交计数

Posted

技术标签:

【中文标题】一天的 Git 提交计数【英文标题】:Git commit count a day 【发布时间】:2016-06-16 14:12:03 【问题描述】:

我有一个名为development 的分支。现在我想知道每天(即每天)发生了多少次提交。

我想要提交的总次数(即一天内的提交次数。

我试过这个命令,但它从分支中计算所有提交

git shortlog -s -n

我的问题是统计一天的提交次数

【问题讨论】:

【参考方案1】:

我试过了:

git 日志 | grep 日期 | awk '打印" : "$4" "$3" "$6' | uniq -c

而且它有效。你会得到类似的东西:

   5  : 3 Mar 2016
   4  : 2 Mar 2016
   8  : 1 Mar 2016
   [...]

我找到了命令here。

【讨论】:

结合 grep "你的日期"。这仅适用于特定的一天。上面的解决方案有范围。 这似乎是不必要的浪费,因为它传递了一个正常的、完整的git log,而不是每次提交所需的最小值。此外,您不要 sort,这可能会导致 uniq 返回糟糕的结果和/或对您大喊大叫,因为作者(您在此处显示的内容)和提交日期都不需要按时间顺序排列。【参考方案2】:

试试这个:

$ 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

【讨论】:

【参考方案3】:

这回答了所问问题的“每天”方面,它似乎无法决定是要“每天”表示多个还是仅“一天”表示单一。 ;-) 显然,“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-pickrebase 等,它的用处就会大大降低。 uniq 需要 | sort,因为它只检查相邻的重复项。当然,我们几乎可以肯定无论如何都希望日期排在最后。 | uniq -c 计算每个 YYYY-MM-DD 的相邻重复项的数量,并将其添加到日期之前。

喜剧奖励:如果您希望将其作为制表符分隔的日期然后计数,以便输入到图形引擎或类似引擎中,那么只需将上述结果输入

sed 's:^  *\([1-9][0-9]*\) \([1-9][0-9-]*\)$:\2\t\1:g'

就这么简单……!

或者,通过使用awk 而不是sed 来避免发疯:

awk 'BEGINOFS = "\t" print $2, $1'

【讨论】:

以上是关于一天的 Git 提交计数的主要内容,如果未能解决你的问题,请参考以下文章

CCF——折点计数(2016-4)

CCF 201604-1折点计数 (水题,暴力)

201604-1 折点计数

CCF - 201604-1 - 折点计数

CCF CSP 201604-1 折点计数

CCF201604-1 折点计数(100分)序列处理