为什么 git 不必要地运行了 less?

Gre*_*att 27 git

当我运行git branch(从 bash 或 csh)时,它会自动通过less. 然而,由于存储库中只有几个分支,这是不必要的,这很烦人,因为一旦我退出较少,分支列表就会消失。

检查~/.gitconfig文件和本地.git/config文件没有发现有关寻呼机或任何其他会导致这种情况的东西。否则,我在网络搜索中发现的任何内容都没有帮助或有希望。

为什么会发生这种情况,我可以做什么(如果有的话)less在需要时运行(例如,git log当有很多历史时执行)而不是其他情况(例如git branch只有 2 或 3 个分支)?

QIS*_*QIS 40

您可以设置以下内容:

git config --global core.pager 'less -FRX'
Run Code Online (Sandbox Code Playgroud)

这将确保less

  • 如果整个文件可以显示在第一个屏幕上,则退出 ( F)
  • 输出用于终端格式化的原始控制字符 ( R)
  • 排长队 ( S)
  • 不要将 init/de-init 字符串发送到终端 - 避免在退出时清除屏幕 ( X)

编辑:S根据 Peter A. Scheider 的评论删除了该选项

  • OP 很可能认为这种行为通常令人讨厌;我想可以设置环境变量 `export PAGER='less -FRSX'` 并且 git 会尊重它(没有特定的 git 配置)。顺便说一句,`-S` 很危险,因为它会默默地丢弃输出。 (11认同)
  • 将环境变量`LESS`设置为`-FR`,加入X和S来品尝是另一种方式。 (8认同)
  • 如果您希望它仅适用于当前存储库,请省略 `--global`。 (7认同)
  • 另见 https://unix.stackexchange.com/questions/469360/less-performs-differently-when-invoked-from-bash-and-from-git?rq=1 (2认同)

dgc*_*dgc 6

这里有一些关于调整less行为的很好的答案,但由于我的灰胡子手指习惯于|more在需要时打字,并且由于我仍然比 git 更适合 Mercurial,所以我热衷于

git config --global core.pager cat
Run Code Online (Sandbox Code Playgroud)

  • 将 `core.pager` 设置为空字符串(`git config core.pager ''`)或设置为 `cat` 将不会运行任何内容。如果您不相信我,您可以自己解决;-) 没有任何理由将其设置为像“no”这样的虚拟命令。 (7认同)
  • `git-config` 的手册页指出 `core.pager` 的值旨在由 shell 解释。当您将其设置为“no”时,它会尝试执行命令“no”,该命令很可能不存在,然后它会退回到简单地输出内容。您仍然会在头部看到一条错误消息。您可能想要做的是将其设置为“cat”。 (3认同)
  • 这是一条很好的信息,但我喜欢的是它不执行_任何东西_。`cat` 是无用的,我并不特别相信 Linux util 维护者不会改变 cat 的功能(参见 [`ls` 引用的文件崩溃](https://unix.stackexchange.com/questions/258679) )。也许我应该用“永远不要”来代替。这样的程序不太可能存在。 (2认同)