仅在git中为stash命令关闭寻呼机

Sve*_*ach 25 git git-stash pager

我一般都喜欢在git中使用寻呼机,但git stash寻呼机让我烦恼.在调用时git stash list,我不希望在寻呼机中显示三行输出 - 它会强制我按下q以便在键入folow-up git stash pop命令时再次使输出不可用.

一种解决方案是使用

git --no-pager stash list
Run Code Online (Sandbox Code Playgroud)

但这是打字很多(我很懒).在手册之后git config,我试过了

git config --global pager.stash false
Run Code Online (Sandbox Code Playgroud)

但这似乎没有做文件所说的(实际上,我没有注意到任何影响).然后我试了一下

git config --global alias.stash "--no-pager stash"
Run Code Online (Sandbox Code Playgroud)

再次没有任何显着的影响.

例如,配置得到适当更新

git config pager.stash
false
Run Code Online (Sandbox Code Playgroud)

它没有任何影响.我错过了什么?我怎样才能实现git stash不使用寻呼机?

cbo*_*wns 33

从1.7.7.3开始,git config --global pager.stash false完成此操作.


Cas*_*bel 10

它看起来像stash,并且任何其他非内置命令(写为shell脚本,而不是C语言)都错过了寻呼机配置步骤.我给git邮件列表发了一条说明,询问了这个问题.它看起来像是一个已知的问题,但并不是完全无关紧要的.

你看到别名没有效果的主要原因是git默默地忽略了内置命令的别名; 这个想法是你永远不想让命令无法访问.为了使别名有可能被运行,你需要将其命名为stash.

但是,我认为不允许使用简单的别名来影响运行git命令的环境,这通常包括传递给git自身的选项.如果我使用像你这样的别名:

git config alias.foo --no-pager stash
git foo
fatal: alias 'foo' changes environment variables
Run Code Online (Sandbox Code Playgroud)

如果你想正确地做到这一点,你必须使用!git --no-pager stash它,以便它产生一个子shell并重新调用git.

另一个临时修复,因为它是一个shell脚本,将libexec/git-core/git-stash直接编辑.只需找到该list_stash功能,并将--no-pager选项添加到其调用git log,或覆盖整个脚本,设置GIT_PAGER=cat在顶部.

  • 正如我在原帖中写的那样,我通常只有几个东西,当然也不会超过一页:).我的寻呼机(当然,"少了")无论如何都没有退出.我想出这是因为我在`.bashrc`中设置了`LESS`环境变量,因此git不会用`FRSX`覆盖它.我更新了我的`.gitconfig`以在选项中包含`-FX`以减少手动,现在一切正常. (2认同)

And*_*art 7

或者,您可以配置less为在少于一个屏幕的输出值时退出:

export LESS='-F'
Run Code Online (Sandbox Code Playgroud)

或者,详细说明:

export LESS='--quit-if-one-screen'
Run Code Online (Sandbox Code Playgroud)

如果你的git输出中有颜色,你可能也想要传递-r标志:

export LESS='-F -r'
Run Code Online (Sandbox Code Playgroud)

  • 在这里不起作用(xterm在pts上),因为在`less` quit之后,没有任何东西显示较少,它重绘了之前的提示.但它适用于tty1上的术语"linux". (3认同)