如何防止使用寻呼机的git diff?

有一个命令行开关传递给git diff和默认使用less寻呼机的其他命令?

我知道我可以pipe它猫,但是删除所有的语法突出显示。

我知道我可以设置在全局.gitconfig的寻呼机猫通过GITPAGER=cat (或类似的东西); 但我想有时寻呼机(取决于diff的大小)。

但是,如果有命令行切换,我更喜欢; 我无法find一个,通过手册页。

--no-pager git会告诉它不使用寻呼机。 如果输出适合在一个单一的屏幕上,less于-F会告诉它不页面。

用法:

 git --no-pager diff 

评论的其他选项包括:

 # set an evaporating environment variable to use cat for your pager GIT_PAGER=cat git diff # tell less not to paginate if less than a page export LESS='-F -X $LESS' # ...then git as usual git diff 

正如前面提到的答案所述,如果内容小于一个屏幕,则将-F选项传递给less会导致它退出,但是如果屏幕被重置并且最终没有看到内容,则-X选项将取消那种行为。 所以,我使用以下内容来启用基于内容量的条件分页:

 git config --global --replace-all core.pager "less -F -X" 

使用

 git config --global core.pager cat 

摆脱寻呼机为所有存储库的所有命令。

你也可以通过使用pager.<cmd>设置而不是core.pager来禁用单个git子命令的pager.<cmd> ,你可以改变每个git仓库的设置(omit --global )。

请参阅man git-config并searchpager.<cmd>了解详细信息。

文档中最近的更改提到了删除less的默认选项(“默认选项”为FRSX )的不同方式。

对于这个问题,这将是(git 1.8+)

 git config --global --replace-all core.pager 'less -+F -+X' 

例如, Dirk Bester 在评论中build议:

 export LESS="$LESS -FRXK" 

这样我就可以用Ctrl-Cless颜色中取出颜色差异。

威尔逊·F 在评论和他的问题中提到:

不太支持横向滚动,所以当行被切断时,less一些禁用如果一个屏幕退出,以便用户仍然可以向左滚动文本以查看被切断的内容。


这些修改已经在git 1.8.x中可见,如“ 总是使用寻呼机的git diff ”(见注释)所示。 但是文档刚刚被重新编写( 对于git 1.8.5或1 .9 ,2013年第四季度 )。

供Git命令使用的文本查看器(例如“less”)。
该值意味着由shell解释。

优先顺序是:

  • $GIT_PAGER环境variables,
  • 然后core.pagerconfiguration,
  • 那么$PAGER
  • 然后在编译时select默认值(通常是“less”)。

LESS环境variables未设置时,Git将其设置为FRSX
(如果设置了LESS环境variables,Git根本不会改变它)。

如果你想有select地覆盖Git的LESS的默认设置,你可以设置core.pager为例如less -+S
这将通过Git传递给shell,这将最终的命令转换为LESS=FRSX less -+S 环境告诉命令设置S选项来切断长行,但命令行将其重置为默认值来折叠长行。


请参阅commit 97d01f2a了解新文档措辞背后的原因:

configuration:重写core.pager文档

文中提到了core.pagerGIT_PAGER没有给出优先级的整体画面。 从git var (1)文档中借用更好的描述。

使用该机制来允许系统范围,全局和每个存储库的configuration文件不限于这个特定的variables。 删除它来澄清段落。

重写说明如何将环境variablesLESS设置为Git默认值的部分,以及如何select性地自定义它。


注意: 提交b327583 ( Matthieu Moy moy ,2014年4月,对于git 2.0.x / 2.1,2014年第三季度)将默认删除S:

寻呼机:默认从$ LESS中删除'S'

默认情况下,如果用户未设置$LESS ,则Git将$LESS设置$LESS -FRSX
FRX标志实际上对Git有意义( FX因为有时输出Gitpipe道更短, R因为Gitpipe道颜色输出)。
另一方面, S标志(加长的行)与Git无关,并且是用户偏好的问题。 Git不应该为用户决定更改LESS的默认值

更具体地说, S标志会危害在寻呼机内检查不可信代码的用户,因为补丁看起来像:

 -old code; +new good code; [... lots of tabs ...] malicious code; 

会显示完全相同的:

 -old code; +new good code; 

偏好旧行为的用户仍然可以将$ LESS环境variables显式设置为-FRSX ,或者将core.pager设置为less -S '。

该文档将如下所示:

环境不会设置S选项,但是命令行的作用是减less缩短长行的操作。
同样,将core.pager设置为less -+F将从命令行中禁用环境指定的F选项,取消激活“ quit if one screen ”的行为less
我们可以特别激活某些特定命令的标志:例如,将pager.blame设置为less -S只启用git blame行截断。

您也可以在全局configuration中禁用/启用特定输出的寻呼机:

 git config --global pager.diff false 

或者设置core.pager选项,只需提供一个空string:

 git config --global core.pager '' 

在我看来,这比在你说的那样把它设置成cat更好。

关于配pipe时的禁用颜色:

使用--color来避免着色被禁用。

git diff --color | less -R

或者将其强制configuration(例如在.gitconfig中):

 [color] ui = on 

git diff | less -R

对于非彩色工具,然后使用:

git diff --no-color | some-primitive-tool

导出环境variablesLESS=-R (在例如.bashrc中)在“less”中默认打开颜色支持:

git diff | less

这在Linux下适用于git版本2.1.4:

 git config --global --replace-all core.pager cat 

这使得git使用cat而不是lesscat只是将diff的输出转储到屏幕上diff进行任何分页。

您可以使用pager.alias自己的寻呼机添加一个别名到diff,如下所示:

 [alias] dc = diff dsc = diff --staged [pager] dc = cat dsc = cat 

这将保持颜色,并在“git dc”处调用时使用“cat”作为寻呼机。

另外, 不要做的事情:

  • 在别名中使用–no-pager。 Git(1.8.5.2,Apple Git-48)会抱怨你正在尝试修改环境。
  • 使用!sh或!git的shell。 这将绕过上面的环境错误,但会重置您的工作目录(为了这个命令的目的)到顶层的git目录,所以如果你已经在你的子目录中,任何对本地文件的引用都不会工作回购。

对于我写的一个快速而肮脏的脚本,我这样做了:

 PAGER=cat git diff ... 

我喜欢不时地closures分页,当时我知道输出不是很长。 为此,我发现了一个巧妙的使用git别名的技巧:

 git config --global --add alias.n '!git --no-pager' 

或者将以下内容添加到〜/ .gitconfig的[alias]部分:

 n = !git --no-pager 

这意味着你可以使用前缀n来closures任何git命令的分页,即:

 git n diff # Show the diff without pager git n log -n 3 # Show the last 3 commits without pager git n show v1.1 # Show information about a tag