能否通过自定义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
相关产品推荐
相关产品推荐

