2

在查看包含用于缩进git diff的制表符的代码库中的更改时,制表符字符被许多空格替换。使用 .查看补丁时也会发生同样的情况git show。当我使用git format-patch并查看生成的文件时,cat一切似乎都很好。

由于这些命令显示通过替换字符而损坏的机器可读补丁,我想知道发生了什么以及如何阻止这种情况发生。

4

1 回答 1

3

除了添加控制字符以启用颜色输出和二进制文件的外部文本转换过滤器(如果特别启用)之外,两个 git 命令都不会修改其输出中的任何字符。但是,输出通常通过寻呼机应用程序传输。在许多 Linux 系统上,默认寻呼机是less并且确实会替换选项卡!您可以通过将差异输出通过管道传输到文件或通过另一个应用程序轻松测试此行为,例如git diff | cat,不会修改选项卡,并且如果分页是罪魁祸首,则应该使它们可见。

但是,一些终端仿真器也可能会这样做,并且管道cat仍然会“显示”空格而不是制表符。这可以通过诸如 hexdump 之类的管道来验证:git diff | hd您应该在其中看到 0x09 又名\t字符,其中制表符位于实际源代码中。

您可以通过使用git --no-pager [command]或简单地将输出通过cat. 还有不同的配置选项可以更永久地影响寻呼机​​的使用,例如,针对特定命令全局禁用它,例如,对于 diff:git config --global pager.diff false

于 2021-09-03T07:24:21.280 回答