You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过自定义Git日志格式定制GPG签名有效性标识?

自定义Git提交日志的GPG签名有效性标识

当然可以实现!Git原生的%G?占位符没办法直接自定义输出字符,但我们可以通过结合shell脚本处理日志输出,轻松把默认的G/B/U/N替换成更直观的带颜色符号,比如你想要的绿勾、红叉。下面给你两种实用的方案:

方案一:用Sed替换简单高效

直接在Git别名里嵌套sed命令,对git log的输出做字符替换,配置起来很简单:

[alias]
  l = !git log --graph --decorate --pretty=format:'%C(auto)%G? %H %d%n%an <%ae> [%ai]%n%n %s%n%Creset' | sed -e 's/G/%Cgreen✔%C(auto)/g' -e 's/B/%Cred✖%C(auto)/g' -e 's/U/%Cyellow⚠%C(auto)/g' -e 's/N/%Cgray∅%C(auto)/g'

说明:

  • G(有效签名)→ 绿色对勾 ✔
  • B(无效签名)→ 红色叉号 ✖
  • U(未验证的签名)→ 黄色警告 ⚠
  • N(无签名)→ 灰色空符号 ∅
  • %C(auto)会自动适配你的终端颜色主题,确保后续文本颜色恢复正常

方案二:用Awk实现更灵活的逻辑

如果需要更复杂的判断(比如根据签名状态做额外处理),可以用awk来实现,扩展性更强:

[alias]
  l = !git log --graph --decorate --pretty=format:'%G? %C(auto)%H %d%n%an <%ae> [%ai]%n%n %s%n%Creset' | awk '{
    # 根据签名状态替换符号和颜色
    if ($1 == "G") printf "%s✔%s ", "%Cgreen", "%C(auto)";
    else if ($1 == "B") printf "%s✖%s ", "%Cred", "%C(auto)";
    else if ($1 == "U") printf "%s⚠%s ", "%Cyellow", "%C(auto)";
    else if ($1 == "N") printf "%s∅%s ", "%Cgray", "%C(auto)";
    else printf "%s ", $1; # 处理其他未定义的状态
    # 移除第一列的原始状态字符,输出剩余内容
    $1=""; print substr($0,2)
  }'

前置要求

确保你的Git已经开启颜色支持,执行以下命令即可:

git config --global color.ui auto

这样配置后,执行git l就能看到带自定义符号的签名状态日志啦,比默认的字符直观多了!

内容的提问来源于stack exchange,提问作者Remco Haszing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:33