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

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

但我更喜欢命令行开关。


当前回答

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

PAGER=cat git diff ...

其他回答

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

我用在:

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

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

您可以使用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使用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'

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

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

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

最佳分页小于-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'