如何让 git diff 写到 stdout?

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

我是不是漏掉了什么?也许未知的工具是一个备用或东西,因为我我的机器丢失了一些东西?感谢你的帮助。谢谢。

39996 次浏览

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

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

任何 Git 命令都可以运行这个命令。

如果你想在默认情况下禁用它 仅供参考,你可以通过运行以下命令将 diff 页面设置为 cat:

$ git config pager.diff false

如果您想在默认情况下禁用它,可以通过运行以下命令将 Git 页面设置为 cat:

$ git config --global core.pager cat

下面的 core.pager值使用 less,它打印到 stdout,并且还具有页导航功能(如果需要) ,支持向上和向下滚动(与 cat不同) :

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

如果 diff 符合第一个屏幕(-F) ,输出原始控制字符(-R) ,砍掉长行而不是包装(-S) ,并且不使用 termcap init/deinit 字符串(-X) ,它会立即退出。

如果不关心颜色,也可以对任何 git命令使用 cat

你的案子是 git diff | cat

编辑: 正如评论中指出的那样,如果你确实在意颜色的使用:

git diff --color | cat

正如 @ mipadi指出的那样,原因很简单:

git --no-pager diff