git 输出为空白,除非捕获为: echo "$(git branch)"

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. 但是,所有的“动作”命令(pushpulladdcommit,等)似乎工作如预期,包括适当的输出。(但一些“仅信息”命令也是如此,例如git version.)

这对我来说就像某种 shell 配置错误,但据我所知,它只影响 Git,而且它发生在我喜欢的 ZSH 安装和 vanilla Bash 中,所以也许两者之间有一些奇怪的交互?我已经为有类似问题的其他人进行了高低搜索,但我发现的一切都归结为没有在没有提交的新存储库中列出的分支,这绝对不是这里的情况。

我现在有点想法,所以我希望有人提出进一步调查的建议。

Cha*_*ffy 6

如果这仅在输出到 TTY 时发生,则可能是寻呼机问题。

当在普通终端上运行,除非你捕获或重定向混帐与输出$(git ...)或者git ... | otherprogramisatty(1)是真实的,所以git的自动调用寻呼机,让用户阅读内容太长,不适合在一个屏幕上。

如果是寻呼机问题,则有多种调试选项。

  1. 查看问题是否在没有寻呼机的情况下消失。

    • 是否git --no-pager branch还有问题?
  2. 检查正在使用的寻呼机。

    • declare -p GIT_PAGER会显示配置寻呼机用于git通过环境。
    • git config core.pager会显示配置寻呼机git通过其配置文件。
    • declare -p PAGER 将显示配置为通常由您的操作系统使用的寻呼机。
  3. 检查该寻呼机的配置方式,并尝试清除或简化该配置。

    • 如果您的寻呼机是LESSdeclare -p LESS将显示通过环境为其配置的选项,unset LESS并将暂时清除这些选项。
    • 如果您的寻呼机是MOREdeclare -p MORE将显示通过环境为其配置的选项,unset MORE并将暂时清除这些选项。
    • 对于另一个寻呼机,请考虑阅读其手册。

关于这个特定的例子:

OP 已经LESS='-F -g -i -M -R -S -z-4' export在他们的环境中编辑过。在-F对参数less命令它退出,如果有内容不足一页显示。

在 OP 的 (MacOS) 系统上less,当使用 调用时-F将原始内容发送到标准输出之前退出的股票版本;这可以通过删除该标志或安装更新版本的less.

  • 这就是问题所在。我的“PAGER”环境变量设置为使用“less”,它是“/usr/bin”中的 macOS 系统二进制文件。我还有一个“LESS”环境变量,其中包含“-F”作为输入少于整页时自动退出的选项。我相信该版本的“less”(v487)可能存在一个错误,导致在显示任何输入之前退出。删除“-F”会显示输出,但会在短输入时保持寻呼机打开,这是不希望的。然而,安装 Homebrew 的 `less` (v551) 为我解决了这个问题,同时允许我保留 `-F` 选项。谢谢你! (2认同)