git 显示:重定向到文件后格式发生变化

git show: formatting is changed after redirection to file

我运行git show --stat 2a340b71b280d60bbc29f8d8fe00b7da5760e2bb。 我得到:

commit 2a340b71b280d60bbc29f8d8fe00b7da5760e2bb
Author: xxx <xxx@xxx.com>
Date:   Thu Apr 30 13:40:54 2020 +0200

    xxx

 xxx.c                                |    1 +

我运行git show --stat 2a340b71b280d60bbc29f8d8fe00b7da5760e2bb > git_show.txt。 我得到:

$ cat git_show.txt
commit 2a340b71b280d60bbc29f8d8fe00b7da5760e2bb
Author: xxx <xxx@xxx.com>
Date:   Thu Apr 30 13:40:54 2020 +0200

    xxx

 xxx.c       |    1 +

即格式(间距)不同!很意外。

问题是在 git_show.txt 中还有 .../xxx/xxx.c | 1 + 个文件名被截断的条目,这样就无法看到完整的文件名。

为什么会发生格式更改以及如何保留格式?

P.S。 git version 2.8.0

原因是当您将文本打印到标准输出时,Git 知道您的终端的列大小,并根据该值生成宽度。当您通过管道传输到文件时,Git 没有将您的终端连接到标准输出,因此它默认为 80 列。

如果您想使用不同的宽度,可以将其指定为 --stat 的参数:

$ git show --stat=132 2a340b71b280d60bbc29f8d8fe00b7da5760e2bb > git_show.txt
# or, if your shell supports $COLUMNS:
$ git show --stat=$COLUMNS 2a340b71b280d60bbc29f8d8fe00b7da5760e2bb > git_show.txt

您还可以提供其他参数;有关详细信息,请参阅 git-diff(1)。请注意,这些选项在 2.8.0 中可能不可用;如果是这种情况,那么您将需要升级以获得对此功能的支持。