【问题标题】:How to make git log not prompt to continue?如何让 git log 不提示继续?
【发布时间】:2011-12-05 21:53:11
【问题描述】:

我有几个属于一起的 git 存储库,以及简单的批处理/bash 文件来循环它们。我经常用 log 命令循环它们以快速查看它们处于什么状态。这很好用,除了一件事:如果提交消息长于我的控制台宽(或多行)的字符数,git显示该行,然后是一个带有 (END) 的换行符,我必须按 q 继续(我猜它通过 more 或类似的东西管道输出)。 示例:

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

这很不方便,因为我必须按几次 q,而我只想一口气看到所有这些单行。

如何禁用此行为(最好同时保持此日志格式)?

【问题讨论】:

  • 谢谢,搜索引擎优化工作,我找到了这个!我的主要用例不同:我想在终端中向后滚动,并能够查看我上次运行git log 时的提交哈希值。由于某种原因,页面在 iTerm 中阻止了这一点。这里的答案都奏效了。太好了。

标签: git


【解决方案1】:

Git 有一个禁用寻呼机的选项:

git --no-pager log --decorate=short --pretty=oneline -n1

如果您的寻呼机切断线路并且您想保留该行为,请通过管道发送到 cut...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

...或者在调用前设置环境变量GIT_PAGER

GIT_PAGER="cut -c 1-${COLUMNS-80}" git log --decorate=short --pretty=oneline -n1

【讨论】:

  • 有没有办法让--no-pager 成为默认值,或者在需要时更好地使用此选项的快捷方式?我想过将gitnp 别名为git --no-pager,但我认为有更好的解决方案。
  • @IslamAzab,您可以将 git 别名为 /usr/bin/git --no-pager,这将禁用所有 git 调用的寻呼机。
  • @WarrenP git 没有内置寻呼机。相反,它遵循 Unix 哲学并使用您在 $PAGER 中的任何内容。 git 总是简单地使用$PAGER,而不是像许多其他写得不好的工具那样随机地这样做。 git 唯一的魔力在于,如果$LESS 未定义,它将定义$LESSFRX。更多详情请查看github.com/git/git/blob/master/Documentation/config.txt#L766
  • @WarrenP git 只是提供了一个 override GIT_PAGER,它允许您定义要在 git 需要分页时使用的自定义值,而不是 PAGER。跨度>
  • 修复 git 行为的最简单情况:export GIT_PAGER=cat
【解决方案2】:

另一种解决方案,特别是在使用log子命令时永久禁用pager

  • 仅适用于当前回购:
    git config pager.log false

  • 用于您的 git 安装(即您机器上的所有存储库):
    git config --global pager.log false

您可以猜到,如果需要 onoff 选择性地为某些其他子命令设置 pager,则同样有效。
例如。对于branch(打印分支)子命令,它将是

git config pager.branch false


相比,提出的解决方案可以说更优雅
  • 每次运行特定命令时使用git --no-pager
    因为,很有可能,您不想每次都输入它。

  • git --no-pager 指定为git 的别名
    因为,很可能,您希望避免 隐式 全局配置,或者希望在某些情况下启用 pager

  • 依赖一些环境变量,例如PAGERGIT_PAGER
    因为要做到这一点,您需要确保它们已在您当前的终端会话中设置。而且,如果您希望在每次创建新终端时自动将它们设置为某个自定义值,则需要更改其中一个由 shell 引导的文件,例如 e. G。 ~/.bashrc。这不是一个大问题。但是这些引导文件经常被其他应用程序更改,并且包含大量其他内容,而不仅仅是 Git 使用的内容。因此,理论上,最好使用git config 指定与git 相关的设置,而不是将它们放在e 中。 G。 ~/.bashrc.


所有子命令禁用pager的替代解决方案是指定cat作为实用程序git将用于分页:

  • git config core.pager cat
  • git config --global core.pager cat

我的回答在某种程度上是对以下问题的改写:
“防止 git diff 使用寻呼机?”
https://stackoverflow.com/a/6986231/6103242

引用它是为了指出另一个相关的讨论。

【讨论】:

    【解决方案3】:

    禁用所有命令的寻呼机:

    git config --global core.pager '' 
    

    【讨论】:

    • 这很好用!在 Windows + Powershell 上使用(单引号内的双引号): git config --global core.pager '""'
    【解决方案4】:

    如果 --no-pager 不适合你,你可以通过管道将它传递给 less -F。

    git log --decorate --oneline -5 | less -F
    

    【讨论】:

    • 不过,这仍然是分页的。将其发送到cat 可以避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 2021-04-29
    • 2010-11-16
    • 2021-07-30
    • 2011-10-01
    • 2022-01-19
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多