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 柱状图 ■■■■■。

