是否有一个命令行开关可以传递给gitdiff和其他默认使用较少寻呼机的命令?我知道这些方法存在:

git diff | cat。。。删除所有语法突出显示gitconfig--global core.pager cat将global.gitconfig中的寻呼机设置为cat导出GIT_PAGER=猫

但我更喜欢命令行开关。


当前回答

我的.gitconfig中有这个hunk,它似乎工作正常(diff和show都禁用):

[pager]
    diff = false
    show = false

其他回答

如果您在~/.oh-my-zsh/lib/misc.zsh文件中使用oh my zsh,请注释这一行:

env_default 'LESS' '-R'

这对我来说在Linux上使用Git版本2.1.4是有效的:

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

这使得Git使用cat而不是更少。cat只是将diff的输出转储到屏幕上,而没有任何分页。

我很惊讶我还没有看到这个答案,但很简单:

PAGER= git diff ...

附录A:我使用的是macOS,使用的是zsh,不确定这是否会改变什么。附录B:正如其他人所指出的,如果您想将其用作脚本或不受控制的环境的一部分(可能设置$GIT_PAGER),那么这不是最佳解决方案。

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

PAGER=cat git diff ...

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

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

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

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

export LESS="$LESS -FRXK" 

这样我就可以用Ctrl-C从更少开始得到彩色diff。

Wilson F在评论和问题中提到:

less支持水平滚动,因此当行被截断时,less禁用“如果有一个屏幕就退出”,这样用户仍然可以向左滚动文本以查看被截断的内容。


这些修改在git 1.8.x中已经可见,如“始终为git diff使用寻呼机”(参见注释)所示。但文档刚刚被改写(2013年第4季度,第1.8.5或1.9位)。

Git命令使用的文本查看器(例如“less”)。该值将由shell解释。优先顺序为:$GIT_PAGER环境变量,那么core.pager配置,然后$PAGER,然后在编译时选择默认值(通常为“less”)。当LESS环境变量未设置时,Git将其设置为FRSX(如果设置了LESS环境变量,Git根本不会更改它)。如果您想选择性地覆盖Git的LESS默认设置,可以将core.pager设置为例如LESS-+s。这将由Git传递给shell,它将最终命令转换为LESS=FRSX LESS-+S。环境告诉命令设置S选项以剪切长线,但命令行将其重置为默认值以折叠长线。


关于新文件措辞背后的原因,请参见承诺97d01f2a:

config:重写core.pager文档

文本中提到了core.pager和GIT_pager,但没有给出优先顺序。从gitvar(1)文档中借用更好的描述。使用该机制允许系统范围、全局和每个存储库的配置文件不限于此特定变量。删除它以澄清段落。重写部分,说明如何将环境变量LESS设置为Git的默认值,以及如何选择性地自定义它。


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

寻呼机:默认情况下从$LESS中删除“S”

默认情况下,如果用户未设置$LESS,Git会将$LESS设置为-FRSX。FRX标志实际上对Git来说是有意义的(F和X是因为有时Git管道的输出是短的,R是因为Git管道为输出着色)。另一方面,S标志(斩长线)与Git无关,而是用户偏好的问题。Git不应决定用户更改LESS的默认值。更具体地说,S标志会伤害在寻呼机中查看不可信代码的用户,因为补丁看起来像:-旧代码;+新的良好规范;[…很多标签…]恶意代码;将看起来与:-旧代码;+新的良好规范;喜欢旧行为的用户仍然可以将$LESS环境变量显式设置为-FRSX,或将core.pager设置为“LESS-S”。

文件内容如下:

环境不会设置S选项,但命令行会设置,指示less截断长行。类似地,将core.pager设置为less-+F将从命令行停用环境指定的F选项,停用less的“如果一个屏幕退出”行为。可以专门为特定命令激活一些标志:例如,将pager.fault设置为less-S仅对git责备启用行截断。