仅为stash命令在git中关闭寻呼机
我通常喜欢在git中使用寻呼机,但是对于仅为stash命令在git中关闭寻呼机,git,pager,git-stash,Git,Pager,Git Stash,我通常喜欢在git中使用寻呼机,但是对于git stash来说,寻呼机让我很恼火。在调用git stash list时,我不想看到寻呼机中的三行输出——它迫使我在键入follow upgit stash pop命令时按q,以使输出再次不可用 一种解决办法是使用 git --no-pager stash list 但是打字太多了(我很懒)。接下来,我试着 但这似乎并不像文档中所说的那样(实际上,我没有注意到任何影响)。然后我试着 git config --global alias.stash "
git stash
来说,寻呼机让我很恼火。在调用git stash list
时,我不想看到寻呼机中的三行输出——它迫使我在键入follow upgit stash pop
命令时按q
,以使输出再次不可用
一种解决办法是使用
git --no-pager stash list
但是打字太多了(我很懒)。接下来,我试着
但这似乎并不像文档中所说的那样(实际上,我没有注意到任何影响)。然后我试着
git config --global alias.stash "--no-pager stash"
再一次没有任何明显的效果
例如,配置会得到正确更新
git config pager.stash
false
它只是没有任何效果。我错过了什么?如何实现git stash不使用寻呼机?它看起来像stash,而任何其他非内置命令(作为shell脚本编写,而不是用C编写)都会错过寻呼机配置步骤。我向git邮件列表发送了一封短信,询问这一点;看起来这是一个已知的问题,但修复起来并非微不足道 您认为别名没有任何效果的主要原因是git会自动忽略内置命令的别名;其思想是,您永远不希望实际使命令无法访问。要使别名有机会运行,您需要将其命名为
stash
以外的名称
但是,我认为简单的别名不允许影响git命令运行的环境,它通常包括传递给git
本身的选项。如果我使用像您这样的别名:
git config alias.foo --no-pager stash
git foo
fatal: alias 'foo' changes environment variables
如果您想正确地执行此操作,您必须使用!git——没有寻呼机存储
,因此它将生成一个子shell并重新调用git
另一个临时修复方法是直接编辑
libexec/git-core/git-stash
,因为它是一个shell脚本。只需找到list\u stash
函数,并将--no pager
选项添加到其对git log
的调用中,或者要覆盖整个脚本,请在顶部设置git\u pager=cat
。从1.7.3开始,git config--global pager.stash false
完成此操作。或者,如果输出少于一个屏幕,您可以将less
配置为退出:
export LESS='-F'
或者,详细地说:
export LESS='--quit-if-one-screen'
如果git输出中有颜色,可能还需要传递-r
标志:
export LESS='-F -r'
是你的朋友。你还有其他与寻呼机相关的配置吗?Stash没有为我使用寻呼机。请注意:list子命令确实会分页,并忽略配置。请参见下面我的答案:
git config--global pager.stash false
不工作是git 1.7.7.3及更高版本中修复的一个错误。@sven marnach您能将正确答案更改为cbowns的一个吗?实现相同目标的另一个动机:我虔诚地在git stash drop
之前运行git stash show-v
,我希望diff保留在终端中(以防我犯了错误,或者只是为了参考——通常我确实希望以不同的方式重做一小部分更改)。感谢您提供的信息以及在git邮件列表中提到这一点(我也在那里阅读了您邮件的答案)。关于别名:我还尝试了一个不同于stash
的名称,但效果相同。奇怪的是,我没有收到错误消息(版本1.7.2.3),所以我认为这个名字不是原因。我现在只修补脚本。@Sven:你真的有超过一个屏幕的隐藏列表吗?或者你的寻呼机在输出少于一屏后没有退出?@Sven:我不知道你为什么没有收到那个错误。该检查是很久很久以前添加的(v1.5.3)。尽管如此,子shell别名(!…
)也应该可以很好地工作,而且不必编辑git本身。我的寻呼机(less
当然)不会退出。我发现这是因为我在.bashrc
中设置了LESS
环境变量,所以git不会用FRSX
覆盖它。我更新了我的.gitconfig
,将-FX
包含在选项中,以减少手动操作,现在一切正常。@Sven:Aha!我想知道你有没有不标准的传呼机之类的。很高兴你找到了办法!这个解决方案已经隐藏在对Jefromi答案的评论中(不知怎么的)。不过,最好有自己的答案。在这里不起作用(pts上的xterm),因为在less
quit之后,没有剩下的显示内容了,它会重新绘制以前的提示。但它在tty1上的术语“linux”上工作。是的,在某些系统/终端上,输出消失,因为它全部进入“备用屏幕”,并立即切换回:-(添加--no init
可能会有所帮助。如果您希望只影响git而不影响其他|less
使用,还可以执行git config--global core.pager'less--quit if one screen'
。
export LESS='-F -r'
stll = "!git --no-pager stash list"