如何使git diff写入stdout?


93

默认情况下,将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

有我想念的地方吗?也许未知的工具是回退之类的东西,还是因为我的机器缺少某些东西?任何帮助表示赞赏。谢谢。


Answers:


166

默认情况下,Git将其diff输出(通常是任何可能超过一屏的输出)发送到系统的分页器,该实用程序一次仅打印一屏的输出。如果要在运行命令时禁用寻呼机,请传递--no-pager给Git:

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

可以为任何Git命令运行。

如果要默认仅对diff禁用它,则可以cat通过运行以下命令将diff传呼机设置为:

$ git config pager.diff false

如果要默认禁用所有命令,则可以cat通过运行以下命令将Git寻呼机设置为:

$ git config --global core.pager cat

不知道传呼机。git config --global core.pager cat做到了!。谢谢您:)
nacho4d

4
@aaronbauman:您是否将其传递给git不是子命令)?
mipadi 2015年

我看到,“ git --no-pager diff”与“ git diff --no-pager”不同。谢谢您的澄清
aaronbauman

1
同样的事情也适用git branch,例如git config pager.branch false
dinjas '18

30

以下core.pager值使用less,可打印到标准输出,还具有寻呼功能(如果需要),可以上下滚动(与不同cat):

$ git config --global core.pager "less -FRSX"

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


1
谢谢..我一直在通过互联网寻找此选项:)
obai

这就是我想要的
user3595632

20

如果您不关心颜色,也可以简单地将其cat用于任何git命令。

所以git diff | cat对于你的情况。

编辑: 如注释中指出的,如果您确实在乎颜色的使用,请执行以下操作:

git diff --color | cat


9
如果您确实关心颜色,请执行git diff --color | cat(:
xjcl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.