我有几个属于一起的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。
如何禁用此行为(最好还是保留此日志格式)?
答案 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 。
依赖于某些环境变量,例如PAGER
或GIT_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 ''