为什么git diff和git show似乎用空格代替制表符?



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

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

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

然而,一些终端模拟器可能也会这样做,并且通过cat的管道仍然会"显示";空格代替制表符。这可以通过像hexdump:git diff | hd这样的管道来验证,您应该看到0x09又名t字符,其中制表符在实际的源代码中。

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

最新更新