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

Mac端Git GPG提交签名提示Bad Signature问题求助

Mac环境Git GPG提交报Bad Signature排查方案

问题特征:同密钥手动签名普通文件正常,仅Git提交签名校验失败,历史存在1次成功签名记录,日志显示两次签名使用的EDDSA子密钥ID完全一致。

按优先级排查解决

  • 第一步:核对Git调用的GPG程序路径,这是Mac平台最高发的诱因
    很多用户会同时安装Homebrew版gnupg、GPG Suite等多个GPG环境,不同环境的密钥存储路径不互通,一旦Git调用的GPG程序和你终端手动签名用的不是同一个,就会出现手动签名正常、Git签名无效的问题。

    1. 终端执行which gpg,记下当前终端默认调用的gpg绝对路径,M系列Mac默认brew安装路径为/opt/homebrew/bin/gpg,Intel Mac为/usr/local/bin/gpg
    2. 执行git config --global --get gpg.program查看Git配置的GPG路径,如果输出为空、和上一步查到的路径不一致,直接执行命令修正(路径替换成你自己which gpg查到的结果):
      # M系列Mac示例
      git config --global gpg.program /opt/homebrew/bin/gpg
      
    3. 如果你本地同时装了GPG Suite和brew版gnupg,建议统一只用一个,避免两个程序的密钥环不同步。
  • 第二步:核对签名密钥配置,排除仓库级配置覆盖

    1. 执行gpg --list-secret-keys --keyid-format=long,确认你要用的EDDSA签名子密钥(日志中ID为C84C8DAA9C25D70F553262EE4584796C0B3C2855)私钥存在、未过期、未吊销
    2. 分别查看全局和当前仓库的签名密钥配置,避免仓库级配置覆盖全局正确配置:
      # 查全局配置
      git config --global --get user.signingkey
      # 查当前仓库本地配置
      git config --local --get user.signingkey
      
    3. 如果配置值和你实际要用的子密钥ID不匹配,直接修正即可,EDDSA密钥建议直接配置签名子密钥ID,不要用主密钥ID,避免版本兼容问题:
      git config --global user.signingkey 4584796C0B3C2855
      
  • 第三步:修复GPG终端环境配置
    Mac下如果没配置GPG_TTY环境变量,会导致密码输入后gpg-agent传输出错,生成无效签名:

    1. 把下面两行配置加到你用的shell配置文件中,zsh用户改~/.zshrc,bash用户改~/.bash_profile:
      export GPG_TTY=$(tty)
      gpgconf --launch gpg-agent
      
    2. 执行source ~/.zshrc(对应你自己的配置文件路径)让配置生效,再执行killall gpg-agent杀掉旧的代理进程,重新测试提交。
  • 第四步:排查GUI客户端环境问题
    如果你平时用VS Code、SourceTree、Fork等GUI客户端提交代码,先切到终端手动执行签名提交测试:

    # 随便改个文件后执行
    git add .
    git commit -S -m "test gpg sign"
    git log --show-signature -1
    

    如果终端提交签名正常,只有GUI提交报Bad Signature,说明GUI客户端没有继承正确的shell环境变量,直接在GUI客户端的Git配置项里手动指定gpg.program为之前查到的gpg绝对路径即可。

  • 第五步:兜底检查项

    1. 核对Git配置的提交邮箱:执行git config --global user.email和git config --local user.email,确认邮箱和GPG密钥绑定的邮箱完全一致,无多余空格、大小写错误
    2. 检查签名格式配置:执行git config --global --get gpg.format,如果输出为ssh,说明误开了SSH签名模式,执行git config --global gpg.format openpgp改回GPG签名模式即可
    3. 日志中出现的“无可信签名”警告是因为密钥未设置所有者信任度,不影响签名有效性,不需要额外处理。

问题参考日志

commit 2cce84252649442b2b1700986f969fd70d8d7dbc (HEAD -> move-to-docker)
gpg: Signatur vom Di 14 Jun 07:30:19 2022 CEST
gpg:                mittels EDDSA-Schlüssel C84C8DAA9C25D70F553262EE4584796C0B3C2855
gpg: FALSCHE Signatur von "Nick Wassermann (Root SSH User) <nick.wassermann@mail.at>" [unbekannt]
Author: Nick Wassermann <nick.wassermann@mail.at>
Date:   Tue Jun 14 07:30:19 2022 +0200

    tte

commit 3ad84f737e7d1f42907cb55b11482c7d5558adaf
gpg: Signatur vom Mo 13 Jun 09:23:06 2022 CEST
gpg:                mittels EDDSA-Schlüssel C84C8DAA9C25D70F553262EE4584796C0B3C2855
gpg: Korrekte Signatur von "Nick Wassermann (Root SSH User) <nick.wassermann@mail.at>" [unbekannt]
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg:          Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört.
Haupt-Fingerabdruck  = 90C6 F702 31A1 7582 98B3  C94C 1779 A12E 703B D538
Unter-Fingerabdruck  = C84C 8DAA 9C25 D70F 5532  62EE 4584 796C 0B3C 2855
Author: Nick Wassermann <nick.wassermann@mail.at>
Date:   Mon Jun 13 09:23:06 2022 +0200

    added comment

内容的提问来源于stack exchange,提问作者Nick Wassermann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:45:36