23

在对用户的 git 问题进行故障排除时,我不断遇到一些人没有注意到来自 git 的错误/警告消息,然后烫伤了他们的手指。有什么方法可以着色错误和警告 git 输出?

4

4 回答 4

13

由于我没有找到合适的方法来为错误消息着色,我的解决方案是在 git 返回错误代码 (!=0) 时添加额外的警告。

为此,请将其添加到您的~/.bashrc~/.bash_profile

# Wrap git. On errors, print an additional line in red.
git(){
    command git "$@"
    local exitCode=$?
    if [ $exitCode -ne 0 ]; then
        printf "\033[0;31mERROR: git exited with code $exitCode\033[0m\n"
        return $exitCode
    fi
}

结果如下: 在此处输入图像描述

请注意,将 stderr 着色为红色效果不佳,因为 git 在 stderr 中记录了许多内容,而不仅仅是错误。并且在标准输出中输出了一些错误。

于 2016-03-09T23:01:12.863 回答
9

使用 Git 2.18(2018 年第二季度),您现在可以更好地记录设置以着色推送错误/提示。

请参阅Johannes Schindelin ( ) 的提交 79f62e7(2018 年 4 月 21 日(由Johannes Schindelin 合并 -- --提交 79f62e7中,2018 年 4 月 24 日)dscho
dscho

push: 着色错误

这是试图解决我遇到的一个问题,这些人是 Git 新手——尤其是团队环境中的同事——他们错过了他们向远程位置的推送失败,因为失败和成功都返回了一个白色文本块.

一个例子是,如果我将某些东西推送到远程存储库,然后一位同事尝试推送到同一个远程存储库并且推送失败,因为它要求他们先拉取,但他们没有注意到,因为成功和失败都返回一个块的白色文本。然后他们继续他们的业务,认为它已经成功推动。

此补丁为错误和提示着色(分别为红色和黄色),因此每当推送到失败的远程存储库时出现故障时,它会更加明显


使用 Git 2.19(2018 年第三季度),边带代码学会了在接收端输入行的开头选择性地绘制选定的关键字。

请参阅Han-Wen Nienhuys ( ) 的提交 bf1a11f(2018 年 8 月 7 日。 帮助者:Jonathan Nieder ( )(由Junio C Hamano 合并 -- --d280170 提交中,2018 年 8 月 20 日)hanwen
artagnon
gitster

sideband:突出显示远程边带输出中的关键字

着色由配置设置“ color.remote”控制。

支持的关键字是“ error”、“ warning”、“ hint”和“ success”。
如果它们出现在行首,它们会突出显示,这在错误消息中很常见,例如。

ERROR: commit is missing Change-Id

Git 推送过程本身会打印许多不可操作的消息(例如,带宽统计信息、流程不同阶段的对象计数器)。
这掩盖了服务器可能发回的可操作错误消息。
突出显示边带中的关键字会引起对这些消息的更多关注。

此更改的背景是 Gerrit 进行服务器端处理以创建或更新代码审查,并且必须在推送期间将可操作的错误消息(例如缺少 Change-Id)传达给用户。
用户研究表明,新用户很难看到这些消息。

突出显示是在客户端而不是服务器端完成的,因此服务器不必增加了解终端转义码和终端状态的能力。
它也与 Git 控制本地显示的当前状态一致(例如,在消息前加上“ remote:”)。

可以使用color.remote.<KEYWORD>配置设置来配置突出显示。
由于键是不区分大小写的,我们也可以不区分大小写匹配关键字。

最后,这个解决方案是向后兼容的:许多服务器已经在他们的消息前加上“错误”,他们将受益于这个变化,而不需要服务器更新。
相比之下,服务器端解决方案可能需要TERM通过协议检测变量git,因此需要同时更改服务器和客户端。


注意:使用 Git 2.21(2019 年第一季度):以某个关键字开头的行,以及仅包含这些关键字之一的行,应该涂上颜色以便于观察,但后者是自从在 2.19 中引入该功能以来就被破坏了,该功能已得到纠正

请参阅Stefan Beller ( ) 的提交 1f67290(2018 年 12 月 3 日(由Junio C Hamano 合并 -- --20b3bc1 提交中,2019 年 1 月 14 日)stefanbeller
gitster

sideband:仅带有关键字的颜色线

引入 bf1a11f ( : sidebandhighlight keywords in remote sideband output, 2018-08-07) 时,仔细考虑了要突出显示的字符串。
但是59a255a ( sideband: do not read beyond the end of input, 2018-08-18) 带来了原始未测试的回归。
仅包含关键字且不包含其他内容 (" SUCCESS") 的行仍应着色。

于 2018-05-20T23:37:51.837 回答
5

没有 git 内置方法可以做到这一点。Git 只是将错误打印到 STDERR,并不关心错误的致命性或任何事情。你可以做的是把 STDERR 染成红色。在 ServerFault 上已询问如何执行此操作:https ://serverfault.com/questions/59262/bash-print-stderr-in-red-color

有三个基本选项:

  1. 像这样运行你的命令:

    *git-command* 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
    
  2. 使用包装脚本(请参阅 ServeFault 了解这些),并运行类似的命令

    mywrapper *git-command*
    
  3. 安装标准错误。这将允许您使效果永久化,而无需修改命令行。不过,不确定这是否适用于 Windows。

于 2013-01-19T18:58:55.907 回答
1

您可以color使用git.

有关更多信息和示例,请参阅http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Colors-in-Git或http://blog.philippmetzler.com/?p的第二部分=15

示例:(添加到您的 .gitconfig)

[color]
     interactive = always
[color "interactive"]
     error = red bold
于 2013-01-19T13:58:24.393 回答