如何使git diff输出到标准输出?

149

默认情况下,git diff会将所有的+-行打印到标准输出中,但是我有一台(devian)机器(通过ssh连接),在这台机器上,git diff将我带到一个我不知道的编辑器中,并且我需要按下q才能继续。

我已经检查了git config,看起来是这样的:

$ git config --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=XXX
branch.master.remote=origin
branch.master.merge=refs/heads/master
$ git config --global --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
$ git config --system --list
'/etc/gitconfig': No such file or directory

有我忽略的地方吗?也许这个未知工具是一个备用选项,因为我的机器缺少某些东西?感谢任何帮助。


可能是重复的问题:如何防止git diff使用分页器? - Ciro Santilli OurBigBook.com
4个回答

242

默认情况下,Git将其差异输出(以及通常任何可能超过一个屏幕的输出)发送到系统的分页器,它是一个实用程序,一次只打印一屏输出。如果您想在运行命令时禁用分页器,请使用--no-pager参数:

$ git --no-pager <subcommand> <options>

这适用于任何 Git 命令。

如果您想在默认情况下仅对差异禁用它,则可以通过运行以下命令将差异分页器设置为cat

$ git config pager.diff false

如果你想默认禁用所有命令的分页功能,你可以通过运行以下命令将Git分页器设置为cat

$ git config --global core.pager cat

2
之前不知道有分页功能。通过执行命令 git config --global core.pager cat 解决了这个问题!谢谢 :) - nacho4d
4
你是否已将它传递给 git (_而不是_子命令)? - mipadi
我明白了,"git --no-pager diff" 和 "git diff --no-pager" 是不同的。感谢您的澄清。 - aaronbauman
1
相同的方法也适用于 git branch,例如 git config pager.branch false - dinjas
在 ~/.bashrc 中添加别名 alias git-np='git --no-pager' - Deepak Mahakale

46
以下core.pager的值使用less,它会打印到标准输出并具有分页功能(如果需要),使得滚动上下查看文本成为可能,而不像cat命令只能顺序地显示文本内容:
$ git config --global core.pager "less -FRSX"

如果差异适合于第一个屏幕(-F),则立即退出,输出原始控制字符(-R),将长行切割而不是换行(-S),并且不使用termcap init/deinit字符串(-X)。


1
谢谢。我在互联网上找了很久这个选项 :) - obai
1
这个是我想要的。 - user3595632

36

如果您不在意颜色,可以对于任何git命令简单地使用cat

因此,对于您的情况,请使用git diff | cat

编辑: 如评论中所指出,如果您关心颜色,请使用:

git diff --color | cat


12
如果你关心颜色,可以使用命令 git diff --color | cat 进行查看 (: - xjcl

2
正如@mipadi所指出的那样,很简单:
git --no-pager diff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接