当通过管道传输到文件时,git日志的输出会丢失--我错过了什么?

人气:384 发布:2022-10-16 标签: git pipe command-line-interface stdout bash

问题描述

我正在尝试通过命令行获取一些有关GIT提交的信息,这是我正在构建的一个更大的自动化工具的一部分。我需要的信息可以通过以下git日志命令获得:

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

哪一项会产生此输出:

这很好,因为它有我想要的散列和标记,以及提交消息。然而,当我通过管道将其发送到文件中时,括号中的内容似乎不知何故丢失了。我对颜色不太感兴趣,但我只想要纯文本,这是我对任何*nix类程序的期望。

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

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

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

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

日志

您需要将--decorate选项添加到推荐答案命令中。设置为--decorate=short--decorate=full

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

同样,还有配置值和命令选项,用于控制是否(以及何时)输出色码;因此

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

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

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

369