如何让git log不提示继续?

时间:2011-10-12 07:45:19

标签: git

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

> 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)

这是相当不方便的,因为我必须按几次 q ,而我只想一次性看到所有这些oneliner。

如何禁用此行为(最好还是保留此日志格式)?

4 个答案:

答案 0 :(得分:101)

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

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

答案 1 :(得分:3)

另一种解决方法,专门用于在使用log子命令时永久禁用 pager

  • 仅适用于当前存储库:
      git config pager.log false

  • 用于git安装(即计算机上的所有存储库):
    git config --global pager.log false

您可能会猜到,如果需要为某些其他子命令选择性地 on off ,需要 pager
例如对于branch(将打印分支)子命令,它将为

git config pager.branch false


相比,提出的解决方案可以说更优雅
  • 每次运行某些命令时都使用git --no-pager
    因为很可能您不想每次都键入它。

  • git --no-pager指定为git的别名
    因为很可能希望避免隐式全局配置,或者在某些情况下希望启用 pager

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


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

  • git config core.pager cat
  • git config --global core.pager cat

我的回答是以下措辞的改写:
“防止git diff使用分页器吗?”
https://stackoverflow.com/a/6986231/6103242

在此指出另一个相关的讨论。

答案 2 :(得分:1)

如果没有-F,则将它传输给较少的-F-no-pager对你不起作用。

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

答案 3 :(得分:0)

禁用所有命令的寻呼机:

git config --global core.pager ''