在对用户的 git 问题进行故障排除时,我不断遇到一些人没有注意到来自 git 的错误/警告消息,然后烫伤了他们的手指。有什么方法可以着色错误和警告 git 输出?
4 回答
由于我没有找到合适的方法来为错误消息着色,我的解决方案是在 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 中记录了许多内容,而不仅仅是错误。并且在标准输出中输出了一些错误。
使用 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 ( :
sideband
highlight keywords in remote sideband output, 2018-08-07) 时,仔细考虑了要突出显示的字符串。
但是59a255a (sideband
: do not read beyond the end of input, 2018-08-18) 带来了原始未测试的回归。
仅包含关键字且不包含其他内容 ("SUCCESS
") 的行仍应着色。
没有 git 内置方法可以做到这一点。Git 只是将错误打印到 STDERR,并不关心错误的致命性或任何事情。你可以做的是把 STDERR 染成红色。在 ServerFault 上已询问如何执行此操作:https ://serverfault.com/questions/59262/bash-print-stderr-in-red-color
有三个基本选项:
像这样运行你的命令:
*git-command* 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
使用包装脚本(请参阅 ServeFault 了解这些),并运行类似的命令
mywrapper *git-command*
安装标准错误。这将允许您使效果永久化,而无需修改命令行。不过,不确定这是否适用于 Windows。
您可以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