如何使git log不提示继续?


92

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

> 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,而我只想一次看到所有这些单线。

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


Answers:


154

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

是否有办法--no-pager在需要时为该选项设置默认值甚至更好的快捷方式?我认为走样的gitnpgit --no-pager,但我认为这是一个更好的解决方案。
伊斯兰阿萨布(Azab)

1
@IslamAzab,你可以别名git/usr/bin/git --no-pager这将禁用所有的git呼叫寻呼机。
mrkmg '16

1
@WarrenPgit没有内置的寻呼机。取而代之的是,它遵循Unix的哲学,并使用您所拥有的一切$PAGER。与许多其他写得不好的工具不同,它git总是总是$PAGER随机使用而不是随机执行。唯一的魔术git具有的是,如果$LESS没有定义,这将决定$LESS价值FRX。有关更多详细信息,请参见github.com/git/git/blob/master/Documentation/config.txt#L766
Mikko Rantalainen

@WarrenPgit只是提供了一个覆盖 GIT_PAGER,将允许您定义要使用的自定义值,而不是PAGERgit需要分页时使用。
Mikko Rantalainen

1
最简单的情况就是为git修复了行为:export GIT_PAGER = cat
Stragulus

16

专门用于在使用子命令时永久禁用寻呼机的另一种解决方案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相关的设置,git config而不是将其放入例如~/.bashrc


禁用的替代解决方案pager所有的子命令是指定cat为公用事业git会使用分页:

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

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

引用它来指出另一个相关的讨论。



2

如果--no-pager对您不起作用,则可以将其传递给less -F。

git log --decorate --oneline -5 | less -F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.