Win10下Git提交签名报gpg skipped KEY无密钥错误
Windows 10下Git提交签名报
gpg skipped KEY No secret key错误修复方案 核心原因说明
该报错和GnuPG 2.x版本是否需要gpg2程序无关,网上旧教程提到的gpg2配置是GnuPG 1.x时代的遗留要求,2.x版本本身单程序即可完成签名操作,不需要额外下载gpg2组件,Git for Windows自带的gpg程序已经是2.x版本。
绝大多数该场景下的报错根源是 系统内存在多套GPG环境,密钥存储在其中一套的密钥环中,Git调用的是另一套无对应私钥的GPG程序,和配置拼写、路径正确性无关。
修复步骤
- 第一步:定位私钥实际所属的GPG程序
分别执行以下两条命令,检查两套常见GPG程序的私钥列表,确认哪套程序里存了你生成的、ID为ABCDMYKEY12345的私钥:# 检查你当前配置的32位独立安装版GnuPG的私钥 "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format=long # 检查Git for Windows自带64位GnuPG的私钥(默认安装路径如下) "C:\Program Files\Git\usr\bin\gpg.exe" --list-secret-keys --keyid-format=long - 第二步:修正Git的GPG程序指向
哪条命令能返回你的目标私钥,就将对应程序路径设置为Git全局配置的gpg程序路径。例如Git自带gpg能查到密钥时,执行以下命令修改配置:
如果你需要固定使用独立安装的32位GnuPG,直接用该程序重新生成密钥,或将已生成的私钥导入到该程序的密钥环中,再同步更新Git配置里的git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"user.signingkey为对应密钥的长ID即可。 - 第三步:功能验证
执行空提交命令测试签名功能:
命令执行无报错即修复完成。git commit --allow-empty -m "gpg sign test"
其他偶发诱因排查
如果上述步骤执行后仍报错,可逐一排查以下问题:
- 确认
user.signingkey配置值为私钥的16位长ID,即--list-secret-keys --keyid-format=long返回结果中sec行斜杠后的字符串,不要使用短ID、密钥用户名/邮箱作为signingkey值。 - 若私钥设置了保护密码,确认密码输入正确,密码校验失败时部分版本GPG会抛出“找不到私钥”的误导性报错。
- 若你自定义过GPG的
GNUPGHOME环境变量,确认当前运行Git的用户对该自定义路径有读写权限,权限不足时GPG无法读取密钥环内容也会报同类错误。
内容的提问来源于stack exchange,提问作者toshiomagic
相关产品推荐
相关产品推荐

