Windows系统下GPG Commit签名卡住问题求助
Git提交签名无限挂起的解决思路
环境背景
Windows 11 + Windows Terminal + PowerShell 7,相关配置如下:
$HOME\.gitconfig:user.signingkey=F380062B9F847687 commit.gpgsign=true gpg.program=C:/Program Files (x86)/GnuPG/bin/gpg.exe- 通过
winget install --id GnuPG.GnuPG安装GPG - GPG配置文件:
$HOME\.gnupg\gpg.conf:use-agent pinentry-mode loopback$HOME\.gnupg\gpg-agent.conf:allow-loopback-pinentry - 执行
git commit -m 'test'时,卡在调用gpg.exe的步骤,无后续输出、错误日志,命令无限挂起。
解决步骤
1. 单独测试GPG签名命令
直接运行Git正在调用的GPG命令,确认问题是否出在GPG本身:
"C:/Program Files (x86)/GnuPG/bin/gpg.exe" -bsau F380062B9F847687
- 若该命令也卡住,说明问题根源在GPG;若能正常执行(要求输入PIN或输出签名内容),再排查Git与GPG的交互逻辑。
2. 排查Pinentry程序配置
Loopback模式可能导致PIN输入无响应,尝试切换为图形化PIN输入:
- 编辑
$HOME\.gnupg\gpg.conf,注释掉loopback配置:# pinentry-mode loopback - 编辑
$HOME\.gnupg\gpg-agent.conf,注释掉loopback许可:# allow-loopback-pinentry - 重启gpg-agent:
gpgconf --kill gpg-agent && gpgconf --launch gpg-agent - 重新执行
git commit -m 'test',检查是否弹出PIN输入窗口。
3. 检查GPG与Git的位数兼容性
Winget安装的GPG为32位版本(x86路径),而Git是64位版本(mingw64目录),可能存在位数不兼容:
- 安装64位GPG,修改
gitconfig中的gpg.program路径为64位GPG的gpg.exe(通常为C:/Program Files/GnuPG/bin/gpg.exe)。
4. 启用GPG调试日志
手动开启GPG调试日志,获取卡壳的详细信息:
# 设置临时调试环境变量 $env:GPG_AGENT_DEBUG = "verbose" $env:GPG_DEBUG = "verbose" # 重启gpg-agent加载配置 gpgconf --kill gpg-agent && gpgconf --launch gpg-agent # 再次执行Git提交命令 git commit -m 'test'
查看控制台输出的调试信息,定位具体卡环节点。
5. 验证签名密钥有效性
确认使用的签名密钥是可用的私钥:
gpg --list-secret-keys F380062B9F847687
输出应显示对应私钥信息,无过期、禁用标记。
6. 切换环境测试
Windows Terminal的PowerShell环境可能存在特殊变量干扰,尝试在普通CMD中执行:
git commit -m 'test'
若CMD中能正常运行,说明问题出在PowerShell或Terminal的环境配置上。
内容的提问来源于stack exchange,提问作者StefanGreve
相关产品推荐
相关产品推荐

