我一直在尝试让 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
这似乎有道理,因为我阅读了 gpg
和 gpgsm
的数据库是分开的。
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/