Git提交签名GPG异常:密钥文件路径被错误前缀导致签名失败
解决Git Extensions/SourceTree提交时GPG路径错误的问题
嘿,这个问题我之前帮朋友排查过,核心原因很明确:Git配置里的GPG相关路径用了%appdata%环境变量,但GUI工具没把它解析成实际路径,反而当成字面字符串拼在了项目目录后面,所以才会出现C:/Code/XXX/%appdata%/gnupg/pubring.kbx这种完全错误的路径,自然找不到密钥文件了。
下面给你一步步解决的办法:
1. 先查清楚当前Git的GPG配置
打开Git Bash(别用GUI工具自带的终端,Git Bash能正常解析环境变量),跑这个命令看看所有和GPG、签名相关的配置:
git config --list --show-origin | grep -E "(gpg|signing)"
重点看这几个项:
user.signingkey:确认是不是你报错里的ZZZZZZZZZZ,别输错密钥IDgpg.program:有没有指定正确的GPG程序路径GNUPGHOME:如果之前设置过这个环境变量,看看是不是用了%appdata%这种变量形式
2. 把配置里的路径改成绝对路径
GUI工具不认%appdata%,所以我们直接换成实际的绝对路径就行。Windows上%appdata%对应的实际路径一般是C:\Users\你的用户名\AppData\Roaming,你可以自己去文件管理器里确认下pubring.kbx的位置。
方法一:用Git Bash一键配置
在Git Bash里执行这些命令(记得替换成你的信息):
# 指定正确的GPG程序路径 git config --global gpg.program "C:/Program Files/GnuPG/bin/gpg.exe" # 设置你的签名密钥ID git config --global user.signingkey ZZZZZZZZZZ # 如果之前设置了错误的GNUPGHOME,先删掉 git config --global --unset env.GNUPGHOME # 设置正确的绝对路径,替换成你的用户名 git config --global env.GNUPGHOME "C:/Users/你的用户名/AppData/Roaming/gnupg"
方法二:直接改.gitconfig文件
找到你用户目录下的.gitconfig文件(一般在C:\Users\你的用户名\.gitconfig),用记事本打开,修改成类似这样:
[user] signingkey = ZZZZZZZZZZ [gpg] program = C:/Program Files/GnuPG/bin/gpg.exe [env] GNUPGHOME = C:/Users/你的用户名/AppData/Roaming/gnupg
3. 验证配置是否正常
先在Git Bash里测试下GPG能不能正常签名:
echo "test" | gpg --clearsign
如果能生成带签名的文本,说明GPG配置没问题了。然后重启Git Extensions或SourceTree,再尝试提交,应该就不会报路径错误了。
额外提醒
- 确保GUI工具用的是和Git Bash同一个Git版本:在工具的设置里找Git路径,确认指向
C:\Program Files\Git\bin\git.exe - 如果还是不行,试试重启电脑(有时候环境变量需要重启才生效)
- 确认你的密钥确实存在:在Git Bash里跑
gpg --list-secret-keys,能看到ZZZZZZZZZZ对应的密钥就行
内容的提问来源于stack exchange,提问作者Ruskin
相关产品推荐
相关产品推荐

