如何让git diff写入stdout?

nac*_*o4d 72 git terminal

默认情况下将git diff所有+-行打印到标准输出,但我有一个(devian)机器(我通过ssh连接),然后git diff引导我到编辑器(我不知道哪个是),我需要按下q继续.

我检查git配置,它看起来像:

$ 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
Run Code Online (Sandbox Code Playgroud)

有我错过的地方吗?也许这个未知的工具是后备还是什么,因为我的机器丢失了什么东西?任何帮助表示赞赏.谢谢.

mip*_*adi 133

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

$ git --no-pager <subcommand> <options>
Run Code Online (Sandbox Code Playgroud)

这可以针对任何Git命令运行.

如果要在默认情况下仅为diff禁用它,可以cat通过运行以下命令设置diff寻呼机:

$ git config pager.diff false
Run Code Online (Sandbox Code Playgroud)

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

$ git config --global core.pager cat
Run Code Online (Sandbox Code Playgroud)

  • @aaronbauman:你把它传递给`git`(_not_子命令)了吗? (4认同)
  • 不知道寻呼机。`git config --global core.pager cat` 做到了!谢谢 :) (2认同)

fri*_*mle 21

以下core.pager值使用less,打印到stdout,还具有分页器功能(如果需要),可以上下滚动(不同于cat):

$ git config --global core.pager "less -FRSX"
Run Code Online (Sandbox Code Playgroud)

它会立即退出,如果diff适合第一个屏幕(-F),输出原始控制字符(-R),切换长行而不是换行(-S),并且不使用termcap init/deinit strings(-X).


Sha*_*sak 11

如果您不关心颜色,也可以简单地使用cat任何git命令.

所以git diff | cat对你的情况.

编辑: 如评论中指出的那样,如果你关心颜色使用:

git diff --color | cat

  • 如果你关心颜色,做`git diff --color | 猫`(: (5认同)