Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅为stash命令在git中关闭寻呼机_Git_Pager_Git Stash - Fatal编程技术网

仅为stash命令在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中使用寻呼机,但是对于
git stash
来说,寻呼机让我很恼火。在调用
git stash list
时,我不想看到寻呼机中的三行输出——它迫使我在键入follow up
git 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"