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

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输入:

  1. 编辑$HOME\.gnupg\gpg.conf,注释掉loopback配置:
    # pinentry-mode loopback
    
  2. 编辑$HOME\.gnupg\gpg-agent.conf,注释掉loopback许可:
    # allow-loopback-pinentry
    
  3. 重启gpg-agent:
    gpgconf --kill gpg-agent && gpgconf --launch gpg-agent
    
  4. 重新执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:52:37