git commit 没有在 OSX 上使用 GPG 正确签名

标签 git macos gnupg

我一直在尝试让 git 使用 gpg 键,在大量搜索和阅读帖子之后,唯一对我有用的是:

sudo rm /usr/local/bin/gpgsm
ln -s /usr/local/bin/gpg /usr/local/bin/gpgsm

这会欺骗 git 运行一个 gpg 命令而不是一个 gpgsm 命令,如下所示:

GIT_TRACE=1 git commit -S -m"test"
21:24:25.489158 git.c:418               trace: built-in: git commit -S -mtest
21:24:25.493338 run-command.c:643       trace: run_command: gpgsm --status-fd=2 -bsau myKey
error: gpg failed to sign the data
fatal: failed to write commit object

我找不到关于为什么 git 正在运行 gpgsm 命令的任何其他信息,因为单独运行该命令会产生:

gpgsm --status-fd=2 -bsau myKey
gpgsm: can't sign using 'myKey': No public key
[GNUPG:] INV_SGNR 1 myKey
[GNUPG:] INV_RECP 1 myKey

这似乎有道理,因为我阅读了 gpggpgsm 的数据库是分开的。

gpgsm key 似乎也不是 git 想要使用的,基于它们对 CN 和 DNS 条目的需要。很高兴在这里显示错误,因为我不想使用我的符号链接(symbolic link) hack。

环境细节:

  • 通过自制软件安装 gpg,版本 2.2.11
  • no-tty 添加到 ~/.gnupg/gpg.conf 实际上让我的事情变得更糟。
  • 我在更改后重新启动以确保 gpg 代理停止运行。
  • ~/.gnupg/gpg-agent.conf的内容是:pinentry-program/usr/local/bin/pinentry

最佳答案

我偶然发现了问题 this explanation git 的 gpg.format 配置。显然它支持运行 gpg 的“opengpg”和运行 gpgsm 的“x509”。运行以下命令导致 git commit -S 使用 gpg 而不是 gpgsm

git config --global gpg.format openpgp

您可以通过查看完整配置来确认格式是否符合您的期望

git config -l --show-origin | grep gpg.format

关于git commit 没有在 OSX 上使用 GPG 正确签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53774160/

相关文章:

cocoa - 写入问题 `NSOutputStream` 。

cocoa - 在Mac应用程序中单击一次即可获取tableView的行号

python - 要求使用默认 key 进行 gpg 签名的密码的脚本

git - git 中与 repo 关联的文件,在版本控制下,但不与任何特定分支关联?

git - GitHub 贡献图如何计算提交?

git - 无法将文件添加到git存储库

javascript - 无法使用 gnupg 解密 openpgpjs (JS) 加密的 pgp 消息(通过 PHP 的 Ubuntu GPG)

git - 从 git gui 命令行启动 gitk

cocoa - 最简单的假期计算方法?

git - 如何在交互式 rebase 压缩后保留提交 gpg 签名?