如何让 git diff 写入标准输出?

Posted

技术标签:

【中文标题】如何让 git diff 写入标准输出?【英文标题】:How to make git diff write to stdout? 【发布时间】:2013-06-09 07:14:30 【问题描述】:

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

有没有我想念的地方?也许未知工具是后备工具或其他什么,因为我的机器缺少某些东西?任何帮助表示赞赏。谢谢。

【问题讨论】:

How do I prevent git diff from using a pager? 的可能重复项 【参考方案1】:

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

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

这可以为任何 Git 命令运行。

如果您想默认禁用它仅用于差异,您可以通过运行将差异寻呼机设置为cat

$ git config pager.diff false

如果你想默认禁用它所有命令,你可以通过运行将 Git 寻呼机设置为cat

$ git config --global core.pager cat

【讨论】:

不知道寻呼机。 git config --global core.pager cat 做到了!谢谢你:) @aaronbauman:您是否将其传递给git不是子命令)? 我明白了,“git --no-pager diff”与“git diff --no-pager”不同。谢谢你的澄清 同样的事情适用于git branch,例如git config pager.branch false 或在 ~/.bashrc 中添加别名alias git-np='git --no-pager'【参考方案2】:

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

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

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

【讨论】:

谢谢你.. 我在互联网上寻找这个选项:) 这个是我想要的【参考方案3】:

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

所以git diff | cat 适合你的情况。

编辑: 如果您确实关心颜色的使用,请在 cmets 中指出:

git diff --color | cat

【讨论】:

如果你关心颜色,请git diff --color | cat (:【参考方案4】:

正如@mipadi 指出的那样,就是这么简单:

git --no-pager diff

【讨论】:

回复:删除投票。我做出这个答案是因为它实际上是一个非常简单的问题,不需要很长的答案。这并不是说一个长答案不受欢迎(我赞成 3 个现有答案中的 2 个,因为它们很棒)。我只是觉得有时人们需要一个简单的答案;因此我提供了一个。 我认为删除投票是因为这个答案几乎与最受支持和接受的答案的开头相同。是的,这个给出了快速准确的命令,而另一个只给出了更一般的命令,但也许一些归属不会受到伤害,否则它可能看起来像一个复制+粘贴的答案。 @Cristik 好点。我会尽快修改

以上是关于如何让 git diff 写入标准输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Popen 同时写入标准输出和日志文件?

如何在 Python 3 中将原始十六进制字节写入标准输出?

如何从 git diff 读取输出?

如何从 git diff 读取输出?

如何将 CSV 输出写入标准输出?

获取合并提交的git diff输出结果