如何着色git错误,警告和致命消息?

use*_*062 18 git

在对用户的git问题进行故障排除时,我不断遇到人们没有注意到来自git的错误/警告消息,然后烧掉他们的手指.有没有办法着色错误和警告git输出?

Tom*_*rez 8

由于我没有找到合适的方法来为错误消息添加颜色,我的解决方案是在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
}
Run Code Online (Sandbox Code Playgroud)

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

请注意,以红色着色stderr不能很好地工作,因为git会在stderr中记录很多东西,而不仅仅是错误.并且在标准输出中输出一些错误.


Chr*_*ial 5

没有git buit-in方式来做到这一点.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)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用包装器脚本(请参阅ServeFault),并运行类似的命令

    mywrapper *git-command*
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装stderred.这将允许您在不修改命令行的情况下使效果永久化.但不确定这是否适用于Windows.


Von*_*onC 5

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

参见Johannes Schindelin()的commit 79f62e7(2018年4月21日(由Johannes Schindelin合并--commit 79f62e7中,2018年4月24日)dscho
dscho

push:着色错误

这是一种尝试解决我与Git刚接触的人员(尤其是团队环境中的同事)遇到的问题的原因,他们错过了将其推送到远程位置的操作失败,因为失败和成功都返回了一段白色文本。

例如,如果我将某项推送到远程存储库,然后一位同事尝试将其推送到相同的远程存储库,则该推送失败,因为它要求他们首先拉动,但他们没有注意到,因为成功和失败都返回一个块白色文本。然后,他们继续进行自己的业务,认为它已成功完成。

此修补程序将错误和提示涂成彩色(分别为红色和黄色),因此当推送到发生故障的远程存储库时出现故障时,它会更加明显


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

参见Han-Wen Nienhuys()的commit bf1a11f(2018年8月7日。 协作者:Jonathan Nieder((通过合并JUNIOÇ滨野- -提交d280170 8月20日2018)hanwen
artagnon
gitster

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

着色是通过配置设置“ color.remote”控制的。

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

ERROR: commit is missing Change-Id
Run Code Online (Sandbox Code Playgroud)

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合并--commit 20b3bc1中,2019年1月14日)stefanbeller
gitster

sideband:仅带有关键字的色线

bf1a11fsideband:在远程边带输出高亮关键字,2018年8月7日),据介绍,它是仔细考虑哪些字符串将被突出显示。
但是59a255asideband:不要在输入结尾处看不到内容,2018-08-18)带来了原始模型没有测试的回归。
仅包含关键字而不包含其他任何内容(“ SUCCESS”)的行仍应上色。