阻止 Git 子模块 foreach 为每个模块打开 less

阻止 Git 子模块 foreach 为每个模块打开 less

我偶尔需要通过我使用的 git 子模块进行 grep:

git submodule foreach 'git grep x'

但是,自从切换到 zsh 后,我发现每个子模块都会打开较少的提示,即使没有选项也是如此。我更喜欢将所有输出打印到终端。

我当前的解决方案是调用:

git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a

这实现了我想要的,但我忍不住觉得我错过了一个选项或更优雅的解决方案。有吗?

答案1

尝试更改 git 使用的分页器:

GIT_PAGER="cat" git submodule foreach 'git grep x'

或者,如果您希望减少使用,但仅当输出将超出屏幕时:

GIT_PAGER="less -FX" git submodule foreach 'git grep x'

您可以使用 设置每个项目的分页器git config,当然也可以全局设置环境变量。

答案2

只是为了涵盖其他方法:

方法#1:--nopager

git submodule foreach 'git --nopager grep x'

方法#2:完全禁用寻呼机

git config --global core.pager cat

从 git-config 手册页:

core.pager git 将用来对输出进行分页的命令。可以使用 GIT_PAGER 环境变量覆盖。请注意,如果在运行分页程序时未设置 LESS 环境变量,则 git 会将其设置为 FRSX。可以通过将 LESS 变量设置为其他值来更改这些设置。或者,可以通过设置 core.pager 选项在项目或全局基础上覆盖这些设置。设置 core.pager 对上面的 LESS 环境变量行为没有影响,所以如果你想以这种方式覆盖 git 的默认设置,你需要明确。例如,要以向后兼容的方式禁用 S 选项,请将 core.pager 设置为 less -+S。这将由 git 传递到 shell,它将最终命令转换为 LESS=FRSX less -+S。

方法#3:pager.<cmd>

您还可以使用 pager 禁用单个 git 子命令的分页。设置而不是 core.pager 并且您可以更改每个 git 存储库的设置(省略 --global)。

git config --global pager.grep cat

从 git-config 手册页:

寻呼机。如果该值为布尔值,则在写入 tty 时打开或关闭特定 git 子命令的输出分页。否则,使用 pager 值指定的分页器为子命令打开分页。如果在命令行上指定了 --paginate 或 --no-pager,则它优先于此选项。要禁用所有命令的分页,请将 core.pager 或 GIT_PAGER 设置为 cat。

方法#4:修改 less 的行为 ( -F -X)

您可以重新配置 less,使其“有条件地”仅对内容大于屏幕大小的文件进行分页 ( -F),并禁用 less 稍后清除屏幕 ( X)。

git config --global core.pager less -F -X

参考

答案3

在这种情况下,我曾经重新分页整个命令

git submodule ... | less

但我们丢失了子命令的任何潜在格式。

然后我意识到我们对“git status”有同样的问题,所以在阅读了“git status”的答案后如何打开寻呼机来输出 git status?“ 我会建议

git config --global pager.submodule "less -FX"

相关内容