【问题标题】:git commit not signing properly with GPG on OSXgit commit 未在 OSX 上使用 GPG 正确签名
【发布时间】:2018-12-14 05:53:23
【问题描述】:

我一直在尝试让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 键似乎也不是git 想要使用的,这取决于它们对 CN 和 DNS 条目的需求。很高兴在这里显示错误,因为我不想使用我的符号链接黑客。

环境详情:

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

【问题讨论】:

  • 您的目标是使用 OpenPGP(默认的 gpg 二进制文件)还是 CMS(gpgsm 二进制文件)?另外,您使用的是哪个 Git 版本?
  • 我想使用gpg,因为这似乎是 github 支持的,尽管我假设它不支持 gpgsm 可能是不正确的。我愿意使用任何让我到达不需要符号链接黑客的地方的东西。我的 git 版本是2.20.0
  • 如果你使用普通的gpg 二进制文件(没有符号链接破解),你会得到什么输出?另外,如果你运行touch /tmp/foo && gpg --status-fd=2 -bsa /tmp/foo 来签署一个空文件,你会用真正的 gpg 得到什么输出?
  • 对格式错误表示歉意。输出:gpg gpg: WARNING: no command supplied. Trying to guess what you mean ... gpg: Go ahead and type your message ... 第二条命令:touch /tmp/foo && gpg --status-fd=2 -bsa /tmp/foo [GNUPG:] KEY_CONSIDERED FC660649664B0D5D12EE7B63B209F8077D754B33 0 [GNUPG:] KEY_CONSIDERED FC660649664B0D5D12EE7B63B209F8077D754B33 2 [GNUPG:] BEGIN_SIGNING H8 [GNUPG:] PINENTRY_LAUNCHED 2111 curses 1.1.0 /dev/ttys006 xterm- 256color - [GNUPG:] SIG_CREATED D 1 8 00 1545082985 FC660649664B0D5D12EE7B63B209F8077D754B33

标签: git macos gnupg


【解决方案1】:

当我偶然发现 git 的 this explanationgpg.format 配置时,我能够找到问题所在。显然它支持运行gpg 的“opengpg”和运行gpgsm 的“x509”。运行以下命令导致git commit -S 使用gpg 而不是gpgsm

git config --global gpg.format openpgp

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

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

【讨论】:

    【解决方案2】:

    由于 Git 尝试使用 gpgsm,很可能您有某种配置设置为使用 gpgsm 作为程序来签名。您可能想运行git config -l --show-origin 并查看是否有一个选项设置让Git 使用gpgsm。您可以搜索gpg,因为所有选项都在该顶级部分下设置。

    【讨论】:

    • 这也是我的想法,但我就是找不到它的设置位置。运行提供的命令将gpg 显示为我的全局程序和我的测试存储库中的程序,而git 调试命令继续尝试运行gpgsm。在运行git 全局配置显示时,我也没有得到gpgsmgrep 命中。很奇怪。我将看看与一些同事的设置进行比较。不过感谢您的帮助;这将是一件奇怪的事情,如果/当我找到它时,我一定会更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2021-10-25
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    相关资源
    最近更新 更多