将`git difftool`管道传输到寻呼机时如何保留颜色

Posted

技术标签:

【中文标题】将`git difftool`管道传输到寻呼机时如何保留颜色【英文标题】:How to retain color when piping `git difftool` to pager 【发布时间】:2018-03-06 14:28:53 【问题描述】:

我无法获得:

git difftool -b -y -x "diff --color --suppress-common-lines -y -w -W 200" master:file.txt file.txt

在管道到less -R 时保留其彩色输出。我做错了什么?

我想我已经尝试了所有 git color config 选项,例如

git -c color.ui=always difftool --color=always -b -y -x "diff --color --suppress-common-lines -y -w -W 200" master:file.txt file.txt | less -R

但是没有颜色。一旦我将管道移至less -R,我就会看到彩色输出。有什么想法吗?

编辑:感谢@jonathan-wakely,我在外部difftooldiff 命令中缺少--color 选项的=always 参数。现在,当管道减少时,这会保持颜色:

git difftool -b -y -x "/usr/local/bin/diff --color=always --suppress-common-lines -y -w -W 200" master:file.txt file.txt

【问题讨论】:

您确定您的意思是difftool,而不仅仅是diff?因为difftool 为每个文件调用diff 工具(如vimdiff),而不是通过管道将diff 传递到std 输出。 difftool你配置了什么? git diff --color=always | less -R 适合我,完美显示颜色。 @phd 我使用 diff 和并排 (-y -W 200) 选项作为外部 difftool 那么你需要在“工具”中--color=alwaysgit difftool -x 'diff --color=always -y -W 50' | less -R 为我工作。 【参考方案1】:

颜色不是来自git 它们来自外部差异工具,所以这决定了是否使用颜色。所以你需要使用-x "diff --color=always ..." 告诉diff 使用颜色,即使输出没有到终端。

【讨论】:

我无法让它工作。 git difftool -y -x 'diff --color=always' 导致一堆 diff: unrecognized option '--color=always'

以上是关于将`git difftool`管道传输到寻呼机时如何保留颜色的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Mac 上将 Xamarin 输出通过管道传输到 less 中?

git difftool 持有外壳

如何将git的STDERR输出通过管道传输到findstr以获得实际结果?

Beyond Compare 4 作为 Windows 10 Pro 上 Git 的 Difftool

git difftool 详解

如何使用 git difftool 来区分合并冲突?