如何使 git 日志不提示继续?

我有两个 git 存储库,它们属于一起,还有一个简单的批处理/bash 文件来循环它们。我经常使用 log 命令遍历它们,以快速查看它们处于什么状态。除了一件事: 如果提交消息长于控制台宽度(或有多行)的字符数,git 会显示行,然后是一个带(END)的换行符,我必须按 才能继续(我猜它会通过 更多或类似的东西传输输出)。 例如:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log


625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log


dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

这是相当不方便的,因为我必须按 一对夫妇的时间,而我只是希望看到所有这些一线程一去不复返。

如何禁用这种行为(最好在保持这种日志格式的情况下) ?

68516 次浏览

Git 有一个禁用寻呼机的选项:

git --no-pager log --decorate=short --pretty=oneline -n1

如果您的传呼机削减线路,你想保持这种行为,无论管道 cut..。

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

... 或者在祈祷前设置环境变量:

GIT_PAGER="cut -c 1-${COLUMNS-80}" git log --decorate=short --pretty=oneline -n1

你管它到 less -F的情况下,--no-pager不为你工作。

git log --decorate --oneline -5 | less -F

-F意味着如果输出在一个屏幕上适合,那么 less将像 --no-pager一样工作,但是在其他情况下变成寻呼机。

另一个解决方案是在使用 log子命令时永久禁用 传呼机:

  • 只适用于现有回购协议:
    git config pager.log false

  • 为您的 git 安装(即所有回购您的机器) :
    git config --global pager.log false

正如您可以猜测的那样,如果选择性地将 传呼机作为其他一些子命令的 开始关掉,也可以使用同样的方法。
例如,对于 branch(打印分支)子命令,它将是

git config pager.branch false


提出的解决方案可以说比

  • 每次运行某个命令时使用 git --no-pager
    因为,很有可能,您不想每次都键入它

  • 指定 git --no-pager作为 git的别名
    因为,很有可能,您希望避免 含蓄全局配置,或者希望在某些情况下启用 传呼机

  • 依赖于一些环境变量,如 PAGERGIT_PAGER
    因为要做到这一点,您需要确保它们是在当前的终端会话中设置的。并且,如果您希望在每次创建新终端时自动将它们设置为某个自定义值,则需要修改 shell 引导的文件之一,如 ~/.bashrc。没什么大不了的。但是这些引导文件经常被其他应用程序修改,并且包含大量其他内容,而不仅仅是 Git 使用的内容。因此,在理论上,最好使用 git config来指定与 git 相关的设置,而不是将它们放在例如 ~/.bashrc中。


所有子命令禁用 pager的另一种解决方案是指定 cat作为 git 将用于分页的实用工具:

  • git config --global core.pager cat

我的回答是下面这个问题的改写:
“防止 git diff 使用寻呼机?”
Https://stackoverflow.com/a/6986231/6103242

引用它是为了指出另一个相关的讨论。

禁用所有命令的寻呼机:

git config --global core.pager ''
export PAGER=cat

对我有用

虽然上面的答案可能是正确的,我想添加一个最适合我。我建议通过添加以下标志来配置 less而不是 git:

export LESS="${LESS:+$LESS }-X -F"
-X  Disables sending the termcap initialization and deinitialization strings to the terminal.
-F or --quit-if-one-screen -> no need to press `q` if output fits into the current terminal size.