从`git log --shortstat`与`git log --numstat`获得的总数彼此不同

时间:2018-09-05 16:16:28

标签: git git-log code-metrics

我想从存储库中获取代码“性能”指标,即关于两个树状点之间随时间变化的文件数量,插入和删除次数的摘要。

通过阅读其他人的建议和git的文档,我有两种累加数字的方法。
两者都吐出了一些不错的数字,但是我对不同的总数感到惊讶,我想知道为什么会这样。在我自己的一个存储库中,差异非常大(以千计)。

为什么-shortstat -numstat 的总数彼此不同,而即使文件数量大,后者的报告也比前者少?是因为-numstat 不计数的二进制文件,内部差异时上下文行的数量还是合并的处理方式?

以openssl 1.1.0稳定分支为例:

1)解析 git log --shortstat

condition2

吐出
git log --shortstat --no-merges --find-renames --pretty="%H" OpenSSL_1_1_0-pre6..OpenSSL_1_1_0i \ | grep -E "files? changed" \ | awk 'BEGIN {inserted=0; deleted=0} {commits+=1; files+=$1} $5~/^insertions?/ {inserted+=$4} $5~/^deletions?/ {deleted+=$4} $7~/^deletions?/ {deleted+=$6} END {print "commits:", commits, "* files changed:", files, "* insertions(+):", inserted, "* deletions(-):", deleted}'

2)解析 git log --numstat

commits: 1629 * files changed: 8100 * insertions(+): 65709 * deletions(-): 25421

吐出
git log --numstat --no-merges --find-renames --pretty="%H" OpenSSL_1_1_0-pre6..OpenSSL_1_1_0i \ | awk 'NF==1 {commits+=1} NF==3 {files+=1; inserted+=$1; deleted+=$2} END {print "commits:", commits, "* files changed:", files, "* insertions(+):", inserted, "* deletions(-):", deleted}'

0 个答案:

没有答案