首页 > 解决方案 > 如何从 git log 中仅获取文件列表及其更改计数?

问题描述

我只想用它的“图表”列出所有提交中的所有文件,但我无法让它看起来干净,尤其是使用|截断各种文件名的前导管道:

预期输出:

app/code/src/a/b/c.php |  5 ++---
app/code/src/a/b/d.php | 10 +++++-----
...

我得到这样的 git 日志:

git log --stat --pretty=short --graph --oneline 

我可以像这样通过管道将此输出传递给 grep,只选择其中包含图形的线条,如下所示:

git log ... | grep -i " \| "

这很好,除非它到达格式为截断文件名和图形的日志行:

| | | | | | | | | | | | | | | | | | | | | | | | | | | |    ...ata.php | 239 +-
| | | | | | | | | | | | | | | | | | | | | | | | | | | |    ...Api.php |  28 +-
| | | | | | | | | | | | | | | | | | | | | | | | | | | |    ...ons.php |  62 -
| | | | | | | | | | | | | | | | | | | | | | | | | | | |    ...ion.php | 129 -
| | | | | | | | | | | | | | | | | | | | | | | | | | | |    ...ask.php |   9 -
| | | | | | | | | | | | | | | | | | | | | | | | | | | |    ...ver.php | 269 +-

我不关心重复(实际上更喜欢),但filename | graph +/-如果可能的话,我希望看到输出列表。我怎样才能做到这一点?

我猜对于大量数字,即使是符号+...-也会被截断。如果它不可保存,那么即使是这样(或足够接近)的东西也可以:

filename | #insertions | #deletions

我不知道这是否甚至可以通过 git logs 实现,或者是否需要其他东西才能实现。

标签: git

解决方案


尝试替换--stat--numstat

--numstat

类似于--stat,但以十进制表示法和不带缩写的路径名显示添加和删除的行数,以使其更加机器友好。对于二进制文件,输出两个-而不是说0 0.


或者,--stat采用选项来调整显示的字符数:

--stat[=<width>[,<name-width>[,<count>]]]

生成差异统计。默认情况下,文件名部分将使用尽可能多的空间,其余部分用于图形部分。最大宽度默认为终端宽度,如果未连接到终端,则默认为 80 列,并且可以被覆盖<width>。文件名部分的宽度可以通过在逗号后
给出另一个宽度来限制。可以通过使用(影响生成统计图的所有命令)或设置(不影响 git format-patch)<name-width>来限制图形部分的宽度。通过提供第三个参数,您可以将输出限制为第一行,如果还有更多则紧随其后。--stat-graph-width=<width>diff.statGraphWidth=<width><count><count>...

也可以使用 和 单独设置这些--stat-width=<width>参数。--stat-name-width=<name-width>--stat-count=<count>

您可以提供非常高的宽度值,例如--stat=10000


推荐阅读