【问题标题】:git diff: what pager?git diff:什么寻呼机?
【发布时间】:2020-03-12 21:07:30
【问题描述】:

当我在某个文件上运行git diff 时,它使用的是什么寻呼机?我问是因为对于我在 Linux 中与寻呼机一起使用的所有其他命令行工具,当我退出时(通过输入“q”),终端会恢复到之前显示的内容,唯一的证据是我运行了 s.t.作为命令行本身。例如:

> git help diff
> 

manless 本身等相同。但是当我运行git diff 时,整个差异仍然在屏幕上,即使它有数百行长。因此,如果我想查看先前命令的输出,我必须向后滚动。

这似乎是less -X 的行为,它“禁止将 termcap 初始化和去初始化字符串发送到终端”。

我已经阅读了git diff 的文档,但我没有看到它说明如何将终端恢复到运行差异之前的状态。我可以export PAGER=/bin/less,但这没有效果(它可能是git diff 的默认寻呼机)。

可能是git diff 以某种方式将-X 参数传递给less。但如果是这样,我无论如何也看不到关闭这种行为(less 的手册页对此保持沉默)。

相关:https://unix.stackexchange.com/questions/167735/can-less-f-be-usefully-combined-with-termcap-initialization。但这并不能告诉我为什么git diff 的行为就像它正在传递-X 参数一样。 (FWIW,我的终端报告它是 xterm-256color。)

【问题讨论】:

  • 据我自己阅读代码所猜测的,git使用自己的寻呼机。
  • 很确定它使用 GIT_PAGER,然后是 PAGER
  • 与此相关的文档在man git,而不是git help diff。具体来说,--paginate--no-pager选项,配置选项core.pagerpager.<cmd>,以及环境变量PAGERGIT_PAGER

标签: git diff pager


【解决方案1】:

要查看 Git 正在使用哪个寻呼机,您可以使用 git var GIT_PAGER。要找出 Git 咨询的选项顺序,可以使用 run git var --help;手册页列出了选项的顺序。

请注意,默认情况下,Git 在调用寻呼机时会通过设置一些环境变量来设置一些选项。默认的编译时行为是设置LESS=FRXLV=-c。如果您不想要这些选项,您可以通过自己设置环境变量来覆盖它们,在这种情况下,您的设置将覆盖 Git 的默认值。

【讨论】:

  • 这正是我想要的,谢谢! FRX 对应于less 的 -F、-R 和 -X 命令行参数;没有 R,输出看起来很奇怪,带有颜色的转义码(我猜你可以提供 args 给 git 的 diff 以避免输出这些)。但是 -F 尤其是 -R 参数是我需要关闭的参数:export LESS=R(在 bash 中)。
  • 啊(双关语)。试图编辑我的评论,但为时已晚; -F 和 -X 参数是我需要关闭的。
猜你喜欢
  • 1970-01-01
  • 2011-01-12
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 2013-02-14
  • 2021-03-03
  • 2015-11-28
相关资源
最近更新 更多