Git GPG 签名失败,没有明确的消息

Git GPG signing fails without a clear message

如果我将 Git 设置为使用我的 GPG 密钥签名,它会失败。我试过 GIT_TRACE 但它并没有给我更多信息:

$ GIT_TRACE=1 git commit
15:29:35.112157 git.c:344               trace: built-in: git 'commit'
15:29:35.115745 run-command.c:626       trace: run_command: 'code --wait' '/Users/b/VurbAgency/haarlem.github.io/.git/COMMIT_EDITMSG'
15:29:52.884006 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' 'SECRETKEYID'
error: gpg failed to sign the data
fatal: failed to write commit object

当我尝试 运行 'gpg' '--status-fd=2' '-bsau' 'SECRETKEYID' 它只是在说 BEGIN_SIGNING H8 之后挂起并且不再做任何事情。

关于如何解决这个问题或研究途径的任何想法?

在我看到我的 GPG 版本是 2.2.5 并且最新版本是 2.2.10 后,我已经使用 brew upgrade gpg 在我的 mac 上更新了 GPG。

这暂时解决了问题。但是,我仍然不知道这个问题的原因是什么。

我在遇到同样的错误时偶然发现了这个,而且我已经在使用最新版本的 gpg (2.2.17)。对我来说,结果是多方面的。

  1. 在提交之前,我必须 运行 $ export GPG_TTY=$(tty)。然后这会提示出现密码提示。
  2. 如果我使用带有特殊字符的密码短语,它不起作用(提示说我在尝试使用时密码短语错误),所以我只能使用字母数字字符。

如果您这样做是为了在 GitHub 上获得经过验证的提交,请确保姓名和电子邮件地址与您在 GitHub 上的名称和电子邮件地址相匹配。

如果您使用 Homebrew 安装了 gpg,并且还在使用 GPGTools,则需要卸载 Homebrew 的 gpg。

# Uninstall gpg in homebrew so that it uses the gpg in GPGTools instead
$ brew uninstall gpg

# You might need to do some extra cleanup afterward as well:
$ rm -r /opt/homebrew/etc/gnupg

# Restart the gpg-agent so that it uses the correct one:
$ gpgconf --kill gpg-agent

在那之后,git 能够再次签署我的提交。

我运行进入同样的问题。在 GnuPG 配置文件 ~/.gnupg/gpg-agent.conf 中,pinentry-program 路径指向 pinentry-mac,它丢失了。

运行 brew install pinentry-mac 已修复。