目前,我在 Windows 上运行 git 2.15.0.windows.1、gpg 2.2.1 和 gpg-agent 2.2.1。我尝试通过 pinentry/gpg-agent 使用 git 签署提交,但是,当通过 git 签署提交时,pinentry 从未出现,git 会抛出错误。我仍然能够通过 gpg 签署提交,但不能通过 git 签署。
> git commit -a -S -m "Signed Commit"
gpg: gpg-agent is not available in this session
gpg: Sorry, no terminal at all requested - can't get input
error: gpg failed to sign the data
fatal: failed to write commit object
我仍然可以通过 gpg 进行签名,无需 git:
我的gpg.conf:
keyserver hkp://keys.gnupg.net
no-tty
use-agent
当我删除最后两行时,gpg 仍会弹出 pinentry,然后 git 可以再次签署提交,但是它只会接受通过命令行而不是 pinentry 输入密码。
我怎样才能修复原始错误并让签名提交弹出 pinentry?
答案1
我能够通过设置正确的 git 配置选项来修复它。
首先,通过运行获取正确的签名gpg --list-signatures
,并查找标记为sig
或的签名 IDsig 3
sig 3 54ABFD17372D7B88 ...
然后将 git 配置设置user.signingkey
为它:
git config --global user.signingkey 54ABFD17372D7B88
最后,设置gpg.program
为二进制文件的位置gpg.exe
。
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
现在,当您使用-S
或提交时--gpg-sign
,您应该会看到 pinentry 框。
如果您希望它与大多数 GUI 程序一起使用,例如 VS Code、GitHub Desktop 和基于 IDEA 的产品(PyCharm、Android Studio、PHPStorm 等),则应将其设置commit.gpgsign
为 true:
git config --global commit.gpgsign true
这将对每个提交进行签名。如果您不想对某个特定的提交进行签名,请--no-gpg-sign
在提交时使用。
答案2
我最终安装了多个 gpg 客户端。我猜是我最近更新 git 客户端时意外安装的,因为我之前在其他场合单独安装了它。我不得不分配它gpg.program
才能让它再次正常工作。
git config --global gpg.program "C:\Path\To\My\Custom\gpg.exe"