Git在Windows命令提示符下执行命令时卡在(END)处。

60
我已经安装了Git for Windows (msysgit),最近几天一直运行良好,但今天遇到了一个奇怪的错误。
当在Windows命令提示符或msysgit捆绑的Git Bash中发出Git命令时,会出现一个奇怪的"(END)"行,然后我就无法发出其他命令。

alt text

此时我只听到系统蜂鸣声。

有任何想法吗?

谢谢,P。

4个回答

106

Git想要向您显示多个屏幕的信息,为此它调用标准的Unix分页程序less。当您不再想在输出中导航时,只需键入q即可返回提示符。

  • j向下移动一行
  • k向上移动一行
  • <space>向下移动一页
  • b向上移动一页
  • h显示帮助信息

如果您想有效地使用git,应该学习基本的Unix工具。即使git在Windows上构建和运行,它在这个平台上仍然是一个相当陌生的软件。

如果您不想使用less,只需在配置中将其替换为另一个分页程序即可。如果您根本不想使用分页器,只需使用cat

git config --global --add core.pager cat

3
替换“less”为“cat”的做法值得点赞,虽然我自己永远都不会这么做! - Skilldrick
你也可以使用more代替less - dave1010
1
有时候,“少”就是“多” :) - Robbie
如果有人感兴趣的话,按下键盘上的 end 键可以跳转到列表末尾。 - hexicle

17

1
有没有可能防止 Git 这样做? - paperclip
2
@paperclip 你为什么想要这样做呢?很快你就需要翻页查看结果了——现在只是因为你刚开始,所以只有一页。习惯按下 q 键吧。 - Skilldrick
3
对于 Windows 命令行用户来说,如果你不需要超过 1 页的内容,需要退出分页浏览器是很反直觉的。如果我需要分页输出,我会显式地使用管道命令 "more",例如 git diff | more。 - Chris Oldwood

9
当我寻找同样的东西时,我第一次遇到了这个问题,那就是不必退出日志命令。后来我找到了我喜欢的答案,所以即使是远远超过原来的要求,我也会添加这个答案,提供一个我自己的搜索中没有快速找到的额外解决方案。
其他人已经说明了为什么会出现 (END) - 结果正在通过分页器进行传输,可以为其配置不同的分页器。
然而,有时我不想让它停下来; 因为我已经指定了其他限制选项。我发现对于这个问题,git 有一个全局选项 --no-pager,用于关闭配置文件中定义的任何分页器。
这个全局选项在 git 命令本身上可用,适用于所有子命令,并且放置在子命令之前,像这样:
git --no-pager log

5
Git使用名为“pager”的工具,其中包括less,使您可以轻松地滚动大量程序输出。但是,在Windows上的Git默认设置似乎是即使输出不到一屏幕,也要保持分页运行。

以下是我之前的默认设置,它总是显示(END)并等待您按下q才能返回提示符:

$ git config --get core.pager
less -+F

你可以通过将选项更改为-F而不是-+F来更改行为,以便less仅在输出超过一屏时保持运行(并控制键盘)。 使用以下方法解决烦人的分页器问题:
$ git config --global core.pager "less -F"

(在less中,-+X选项语法被记录为将-X选项重置为其“默认值”,尽管我观察到的行为与-+F不同,因为完全删除该选项相当于-F,而不是-+F。)

less -+X 对我很有用。它可以在我退出 less 时消除“less 输出”,就像在 Linux 上的默认行为一样。不确定为什么在 Windows 下的 Git Bash 上它不是默认设置。 - saeedgnu
实际上,less -+X -+F 是最好的选择,因为即使输出少于一个屏幕,它也可以做到这一点。 - saeedgnu
你也可以设置 pager = delta | less -+X -+F - saeedgnu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接