如何在差异文件上获得 git 统计信息?

How to have git stats on a diff file?

在 git 存储库中时,我可以:

git log --oneline --stat

我会得到一个不错的输出,如下所示:

ca0ab77 commit message
a/file/changed | 19 -------------------
1 file changed, 19 deletions(-)

就我而言,我在 git 存储库之外工作,我只有 .diff(git diff <commit-ish> 的输出)文件,我希望有相同的统计信息(文件已更改, 增加, 删除).

有工具吗?或者我应该写一个正则表达式?

带有 +/- 符号和“1 个文件已更改,...”的直方图称为 diffstat。 diffstat 工具 (man page) 可以生成这些,如果你输入你的 diff:

$ diffstat -p1 my-patch.diff
src/some_file.c |    4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

如果您只想要最后一行,请使用 -s:

$ diffstat -s my-patch.diff
1 file changed, 2 insertions(+), 2 deletions(-)

使用 -p1 可能是一个好主意,如果你正在喂它 git 具有 a/b 前缀的差异。如果您不使用 -p,diffstat 会从文件名中去除常见的前缀。有时这会给您带来意想不到的结果(特别是如果您的补丁通过与 /dev/null 比较来添加或删除文件)。

如果您使用 -C 选项,Diffstat 还可以为您提供彩色直方图。