管道传输到git日志的输出会丢失 - 我错过了什么?

Cha*_*lts 3 git bash stdout pipe command-line-interface

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

git log --branches --graph --oneline --parents
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

在此输入图像描述

这很棒,因为它具有我想要的哈希和标签,以及提交消息.但是,当我将它传递给一个文件时,括号中的东西似乎以某种方式丢失了.我对颜色不太感兴趣,但我确实只想要纯文本,就像我期望的任何类似*nix的程序一样.

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

在此输入图像描述

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

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

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

Mar*_*ger 6

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

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

类似地,还有配置值和命令选项来控制是否输出颜色代码(以及何时); 所以

git log --branches --graph --oneline --parents --decorate=short --color=always
Run Code Online (Sandbox Code Playgroud)

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

请注意,在编写脚本时,您可能应该在命令行中包含这些选项,而不是假设设置了哪些配置值.根据您对输出所做的操作,log无论如何都可能是也可能不是脚本编写中最好的命令,因为git命令在某种程度上分为用于人类消费的那些命令和用于编写脚本的那些命令.