【问题标题】:Output from git log gets lost when piped to file - what am I missing?当管道传输到文件时,来自 git log 的输出会丢失 - 我错过了什么?
【发布时间】:2018-05-05 00:23:31
【问题描述】:

我正在尝试通过命令行获取一些关于一些 git 提交的信息,作为我正在构建的一个更大的自动化工具的一部分。我想要的信息可以通过这个 git log 命令获得:

git log --branches --graph --oneline --parents

产生这个输出:

这很棒,因为它有我想要的哈希和标签,以及提交消息。但是,当我将其通过管道传输到文件时,括号中的内容似乎以某种方式丢失了。我对颜色不太感兴趣,但我只想要纯文本,就像我对任何类似 *nix 的程序所期望的那样。

这是我似乎得到的输出,它省略了一些我想要的输出(例如,标签信息):

我不确定这些信息在通过管道传输到某个地方时如何或为什么会丢失。我觉得这可能是非常简单和明显的事情。

无论我是在 Arch Linux 上的 Bash(使用最新版本的 git)还是​​在 Windows 的 MINGW64 Bash 环境中执行此操作,我都会遇到同样的问题。

问题:如何在不丢失管道到文件时丢失的信息的情况下完全捕获 git log 的输出?

【问题讨论】:

  • 重定向标准错误:2>&1
  • 为什么上面的评论实际上不是问题的解决方案,即使是最小的测试也证明了这一点并得到了文档的证实?
  • git 在检测到其标准输出不是终端时可能表现不同。但是,还有其他事情正在发生,因为您不应该在命令中没有 --decorate 选项的情况下获得该输出。
  • @chepner - “别的东西”就像将 log.decorate 配置值设置为 auto 一样简单

标签: bash command-line-interface git pipe stdout


【解决方案1】:

您需要将--decorate 选项添加到您的日志命令中。将其设置为--decorate=short--decorate=full

它出现在您的配置中,您可能已经将log.decorate 设置为auto,这意味着在写入终端时会显示标签等(以short 形式),而不是管道或其他文件。

同样有配置值和命令选项控制是否(以及何时)输出颜色代码;所以

git log --branches --graph --oneline --parents --decorate=short --color=always

即使重定向到文件也会输出标签和颜色。

请注意,在编写脚本时,您可能应该在命令行中包含这些选项,而不是假设设置了哪些配置值。根据您对输出的处理方式,log 可能是也可能不是在脚本中使用的最佳命令,因为 git 命令在某种程度上分为用于人类消费的命令和用于脚本的命令。

【讨论】:

    【解决方案2】:

    你的 git 命令:

    git log --branches --graph --oneline --parents
    

    不会为我产生与您在第一个示例中显示的相同的输出。但是,它确实会产生类似于第二个示例的输出。添加--decorate 选项时,括号中的引用名称(分支和标签)包括在内。 (Here's the documentation.)

    请注意,您的 git 日志格式可以在您的 ~/.gitconfig 文件中进行控制。例如,您在问题中显示的格式看起来可以通过以下选项实现:

    git log --decorate --graph --all --format='%C(auto,yellow)%h%C(auto,reset) %C(auto,yellow)%p%C(auto,reset) %C(auto,red)%d%C(auto,reset) %s %C(auto,green)%an%C(auto,reset) (%C(auto,cyan)%ar%C(auto,reset))'
    

    如果您尝试使事情自动化,您可以指定一种更适合您的要求的格式。详情请查看git documentation for pretty-formats。尤其要查找%C 格式和%C(auto,…​) 表示法,这会导致仅在从终端运行命令时才使用颜色控件。

    如果无论您是否以交互方式使用git log,您总是想生成颜色信息,您可以删除上述行(或别名)中每个出现的auto,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 2017-08-09
      相关资源
      最近更新 更多