Chr*_*ris 2 git shell homebrew zsh gnu
我遇到了一个奇怪的问题,我真的不知道它是由与我的 Git 安装或我的 shell 相关的东西引起的,还是完全由其他原因引起的。如果我在一个有大量分支和提交的 Git 存储库中,我尝试列出分支:
$ git branch
$ git branch -a
$ git branch --list
Run Code Online (Sandbox Code Playgroud)
根本没有输出。但是,如果我通过echo结果运行这些命令的输出,正如人们所期望的那样:
$ echo "`git branch`"
local-branch-1
local-branch-2
* master
$ echo "$(git branch -a)"
local-branch-1
local-branch-2
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
我的配置是 macOS 10.14.6,通过 Homebrew 安装了 Git 2.29.2。我正在使用带有 Prezto 或 PowerLevel10k 配置的 ZSH 5.8(也是 Homebrew)。尽管这些工具的别名很多快捷方式到Git命令,没有什么是别名从 git *可能是干扰:
$ type git
git is /usr/local/bin/git
git is /usr/bin/git
Run Code Online (Sandbox Code Playgroud)
我也试过一个原始的 Bash 5.0.18 shell,结果是一样的。
ZSH 选项卡完成正确显示了分支,例如,如果我:
$ git checkout <tab>
local-branch-1 master
local-branch-2 origin/HEAD
HEAD origin/master
Run Code Online (Sandbox Code Playgroud)
我从其他一些 Git 命令中得到了类似的行为,例如git config --local --list. 但是,所有的“动作”命令(push,pull,add,commit,等)似乎工作如预期,包括适当的输出。(但一些“仅信息”命令也是如此,例如git version.)
这对我来说就像某种 shell 配置错误,但据我所知,它只影响 Git,而且它发生在我喜欢的 ZSH 安装和 vanilla Bash 中,所以也许两者之间有一些奇怪的交互?我已经为有类似问题的其他人进行了高低搜索,但我发现的一切都归结为没有在没有提交的新存储库中列出的分支,这绝对不是这里的情况。
我现在有点想法,所以我希望有人提出进一步调查的建议。
当在普通终端上运行,除非你捕获或重定向混帐与输出$(git ...)或者git ... | otherprogram,isatty(1)是真实的,所以git的自动调用寻呼机,让用户阅读内容太长,不适合在一个屏幕上。
查看问题是否在没有寻呼机的情况下消失。
git --no-pager branch还有问题?检查正在使用的寻呼机。
declare -p GIT_PAGER会显示配置寻呼机只用于git通过环境。git config core.pager会显示配置寻呼机只为git通过其配置文件。declare -p PAGER 将显示配置为通常由您的操作系统使用的寻呼机。检查该寻呼机的配置方式,并尝试清除或简化该配置。
LESS,declare -p LESS将显示通过环境为其配置的选项,unset LESS并将暂时清除这些选项。MORE,declare -p MORE将显示通过环境为其配置的选项,unset MORE并将暂时清除这些选项。OP 已经LESS='-F -g -i -M -R -S -z-4' export在他们的环境中编辑过。在-F对参数less命令它退出,如果有内容不足一页显示。
在 OP 的 (MacOS) 系统上less,当使用 调用时-F,在将原始内容发送到标准输出之前退出的股票版本;这可以通过删除该标志或安装更新版本的less.