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

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

但我更喜欢命令行开关。


--Git的任何寻呼机都不会告诉它不要使用寻呼机。如果输出适合单个屏幕,则将选项-F传递给less将告诉它不要分页。

用法:

git --no-pager diff

评论中的其他选项包括:

# Set an evaporating environment variable to use 'cat' for your pager
GIT_PAGER=cat git diff

# Tells 'less' not to paginate if less than a page
export LESS="-F -X $LESS"
# ...then Git as usual
git diff

Use

git config --global core.pager cat

为所有存储库删除所有命令的寻呼机。

您还可以使用寻呼机禁用单个Git子命令的分页<cmd>setting而不是core.pager,并且您可以更改每个Git存储库的设置(省略--global)。

请参阅man git配置并搜索寻呼机<cmd>了解详细信息。


关于管道时禁用的颜色:

使用--color可避免禁用着色。

git diff—颜色|更少-R

或者强制配置(例如.gitconfig):

[color]
        ui = on

git diff |小于-R

对于非彩色工具,请使用:

gitdiff--无颜色|一些基本工具

导出环境变量LESS=-R(在例如.bashrc中)默认情况下在“LESS”中启用颜色支持:

git diff|更少


正如前面提到的答案,如果内容少于一个屏幕,则将-F选项传递给less会导致它退出。然而,在这样做之后,屏幕被重置,你最终看不到内容。

-X选项消除了这种行为。因此,我使用以下方法根据内容量启用条件分页:

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

文档中最近的更改提到了一种不同的方式来删除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责备启用行截断。


您可以使用pager.alias为diff添加一个别名,如下所示:

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

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

此外,不要做的事情:

使用--别名中没有寻呼机。Git(1.8.5.2,Apple Git-48)会抱怨你试图修改环境。使用带有!sh或!吉特。这将绕过上面的环境错误,但它会将您的工作目录(出于本命令的目的)重置为顶级Git目录,因此,如果您已经位于存储库的子目录中,则对本地文件的任何引用都将不起作用。


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

git config --global pager.diff false

或者要设置core.pager选项,只需提供一个空字符串:

git config --global core.pager ''

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


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

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

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


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

PAGER=cat git diff ...

当我知道输出不是很长时,我喜欢不时禁用分页。为此,我发现了一个使用Git别名的妙招:

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

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

n = !git --no-pager

这意味着您可以使用前缀n来关闭任何Git命令的分页,即:

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

正如mangit上所说的那样,您可以在任何命令上使用--无寻呼机。

我用在:

git --no-pager diff
git --no-pager log --oneline --graph --decorate --all -n 10

然后使用别名以避免使用(和记住)长命令。


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

[pager]
    diff = false
    show = false

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

env_default 'LESS' '-R'

对于Windows,它是:

git config --global core.pager ""

这将关闭git中所有内容的分页,包括git分支中的超级烦人的分页。


git -P diff

或者——没有寻呼机。

BTW:用猫保存颜色

git diff --color=always | cat

默认情况下,git使用less作为寻呼机。我通常更喜欢,因为它会打印第一页,然后允许您滚动浏览内容。

此外,完成后,内容将保留在控制台中。这通常很方便,因为您通常希望在查找后对内容进行一些处理(例如,给commiter发电子邮件,告诉他他在上次提交时引入了一个bug)。

如果您想通过管道传输内容,滚动打印所有内容将很不方便。更多的好处是你可以将它与管道结合起来,它将贯穿一切,例如。

# Find the commit abcdef123 in the full commit history and read author and commit message
git log |grep -C 5 'abcdef123'

基本上,更多的内容是您所需要的,除非您不希望内容在完成后保留在控制台中。要使用更多,请执行以下操作。

git config --global core.pager 'more'

请遵循以下说明。

只需在终端中键入vi~/.gitconfig。粘贴LESS=“-F-X$LESS”行。按:wq并输入。重新启动终端。


与此相关,如果设置了默认的寻呼机,并且希望创建使用不同寻呼机的别名,则可以使用-c选项将配置参数仅传递给一个命令。

例如,我将delta配置为我的默认git寻呼机,但我可以像这样创建一个lessdiff git别名,以便在需要使用less的情况下使用。

[alias]
    lessdiff = -c core.pager=less diff

最佳分页小于-R-F-X

# Global - all projects (if has no custom local pager)
git config --global core.pager '/usr/bin/less -R -F -X'

# Local - Only on project
git config core.pager '/usr/bin/less -R -F -X'

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

PAGER= git diff ...

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