diffstat 是什么?
在 GitHub 中 diffstat 会以 5 个方块组成的柱状图(diffstat histogram)的形式展示,如封面图中的 ■■■■■。
在 Git 中的 diffstat 则是以 ++++--- 来展示。
可以通过指令 git diff --stat
来查看。
diffstat 是怎么计算出来的?
约定以下 3 个名词:
- changes: 文件变更的总行数
- additions: 文件变更中增加的行数
- deletions: 文件变更减少的行数
以及控制台输出时默认的柱状图最大宽度 80
下文以 columns
代替。
那么计算过程的伪代码如下
if changes > columns
adjust = columns / changes
else
adjust = 1
end
# + 字符数量,仅取整数部分
addition_char_count = floor(additions * adjust)
# - 字符数量,仅取整数部分
deletion_char_count = floor(deletions * adjust)
以 12 changes, 8 additions, 4 deletions
为例,可以得到结果为 ++++++++----。
但如果将 12 changes, 8 additions, 4 deletions
的 columns
设置为 5 呢?
这样上述公式中的 adjust
则会变为 0.417
,经计算得 additions
为 3
,deletions
为 1
,即可得到 ■■■■,为了保持 5 个方块的长度,将缺少部分用灰色补充,就可以得到 GitHub 样式的 diffstat 柱状图 ■■■■■。