git输出为空,除非在:echo“中捕获$(吉特分行)“;
我遇到了一个奇怪的问题,我真的不知道它是由Git安装或shell相关的东西引起的,还是完全由其他东西引起的。如果我在一个有大量分支和提交的Git存储库中,并且我尝试列出分支:git输出为空,除非在:echo“中捕获$(吉特分行)“;,git,shell,homebrew,zsh,gnu,Git,Shell,Homebrew,Zsh,Gnu,我遇到了一个奇怪的问题,我真的不知道它是由Git安装或shell相关的东西引起的,还是完全由其他东西引起的。如果我在一个有大量分支和提交的Git存储库中,并且我尝试列出分支: $git分支 $git分行-a $git分支--列表 根本没有输出。但是,如果我通过echo运行这些命令的输出,结果可能与预期的一样: $echo“`git branch`” 本地分支-1 本地分支机构-2 *主人 $echo“$(git分支-a)” 本地分支-1 本地分支机构-2 *主人 遥控器/原点/磁头->原点/主
$git分支
$git分行-a
$git分支--列表
根本没有输出。但是,如果我通过echo
运行这些命令的输出,结果可能与预期的一样:
$echo“`git branch`”
本地分支-1
本地分支机构-2
*主人
$echo“$(git分支-a)”
本地分支-1
本地分支机构-2
*主人
遥控器/原点/磁头->原点/主控
遥控器/源/主
我的配置是macOS 10.14.6,通过自制安装Git 2.29.2。我正在使用带有Prezto或PowerLevel10k配置的ZSH 5.8(也是自制的)。虽然这些工具为Git命令添加了大量快捷方式别名,但从Git*
中没有任何别名会干扰:
$type git
git是/usr/local/bin/git
git是/usr/bin/git
我还尝试了VirginBash5.0.18shell,结果是一样的
ZSH tab completion正确显示分支,因此如果I,例如:
$git签出
本地分支-1硕士
本地分支机构-2来源/负责人
校长/校长
我从其他一些Git命令中得到了类似的行为,例如Git config--local--list
。但是所有的“操作”命令(push
、pull
、add
、commit
)似乎都按预期工作,包括正确的输出。(但也有一些“仅限信息”的命令,如git-version
)
在我看来,这就像是某种shell配置错误,但据我所知,这只会影响Git,而且在我的花式ZSH安装和vanilla Bash中都会发生,所以这两者之间可能会有一些奇怪的交互?我到处寻找有类似问题的其他人,但我发现的一切都归结为没有在新存储库中列出且没有提交的分支,这里绝对不是这样
我现在有点不知所措,所以我希望有人能提出进一步调查的建议。如果这只发生在输出到TTY时,可能是寻呼机问题。
在常规终端中运行时,除非使用$(git…
或git…|捕获或重定向git的输出其他程序
,isatty(1)
是正确的,因此git会自动调用寻呼机,让用户阅读太长的内容而无法在一个屏幕上显示
如果是寻呼机问题,有几个选项可以调试。
git--no-pager分支是否仍然存在问题
将通过环境显示仅为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
ed。如果要显示的内容少于一页,则-F
参数less
指示其退出
在OP的(MacOS)系统上,当使用
-F
调用less
的库存版本时,在将原始内容发送到stdout之前退出;这可以通过移除该标志或安装更新版本的less
@matt来修复,答案的目标是适用于所有人,而不仅仅是OP。我怀疑其他人会有完全相同的字符串,因此我不相信在答案中包含该字符串本身会添加任何实用程序;我们的目标是写一个对所有寻呼机配置错误的人都有帮助的答案。这就是问题所在。我的PAGER
环境变量设置为使用less
,这是/usr/bin
中的macOS系统二进制文件。我还有一个LESS
环境变量,其中包含-F
,当输入少于一整页时,可以选择自动退出。我相信该版本的less
(v487)中可能存在一个bug,导致在显示任何输入之前退出。删除-F
会显示输出,但短输入时会保持寻呼机打开,这是不可取的。但是,安装自制的less
(v551)为我解决了这个问题,同时允许我保留-F
选项。谢谢大家!@matt,经过编辑,答案明确建议unset LESS
。这一建议本身就解决了OP的问题,也解决了它的变体,这些变体不依赖于-F
来获得相同的行为(并且碰巧是在版本较少的平台上,-F
具有不期望的行为)。通过这种方式,我们既涵盖了OP的直接问题,也涵盖了其他尚未发现的导致同一类故障的途径(其中有无限个/无限个)。@CharlesDuffy我仍然认为,如果OP添加了一个自我回答,以保留实际的指定值,我们都会过得更好