我有几个属于一起的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)
Run Code Online (Sandbox Code Playgroud)
这是相当不方便的,因为我必须按q几次,而我只想一次看到所有这些oneliner.
如何禁用此行为(最好还是保留此日志格式)?
toa*_*abi 112
Git有一个禁用寻呼机的选项:
git --no-pager log --decorate=short --pretty=oneline -n1
Run Code Online (Sandbox Code Playgroud)
如果你的寻呼机切断线并且你想保留这种行为,要么管道到cut
......
git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS
Run Code Online (Sandbox Code Playgroud)
...或者GIT_PAGER
在调用之前设置环境变量:
GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1
Run Code Online (Sandbox Code Playgroud)
专门用于在使用子命令时永久禁用寻呼机的另一种解决方案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
因为很可能要避免隐式全局配置,或者在某些情况下希望启用寻呼机。
依赖一些环境变量,如PAGER
或GIT_PAGER
。
因为这样做,您需要确保在当前的终端会话中设置了它们。并且,如果希望每次创建新终端时将它们自动设置为某些自定义值,则需要更改shell引导文件之一,例如~/.bashrc
。这不是大问题。但是这些自举文件也经常被其他应用程序更改,并且包含许多其他内容,而不仅仅是Git使用的文件。因此,从理论上讲,最好使用git相关的设置,git config
而不是将其放入例如~/.bashrc
。
禁用的替代解决方案pager
为所有的子命令是指定cat
为公用事业git会使用分页:
git config core.pager cat
要么git config --global core.pager cat
我的回答是以下内容的改写:
“防止git diff使用分页器吗?”
/sf/answers/489036201/
引用它来指出另一个相关的讨论。