小编典典

gpg 未能签署数据致命:未能写入提交对象 [Git 2.10.0]

all

我关注了几篇关于Git 2.10发行说明中漂亮属性的文章。通过将
git 升级到 2.10.0 并对全局结果进行更改如下 -.gitconfig

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = abc.def@gmail.com
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

但是现在我尝试使用

git commit -a -S -m "message"

我看到以下错误 -

您需要一个密码来解锁密钥

用户:“XYZ(数字签名)”

2048 位 RSA 密钥,ID AAAAAAA,创建于 2016-07-01

错误:gpg 未能签署数据致命:未能写入提交对象

注意 - 我仍然可以使用git commit -a -m "message"

有没有办法克服同样的问题? 或者在配置中需要进行任何更改gpg以配合 git 的升级?


更新 1

还寻求进一步的用处,遵循Is there a way to “autosign” commits in Git with a GPG key?
. 我已经使用

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

并且很明显会得到同样的错误。


阅读 106

收藏
2022-03-09

共1个答案

小编典典

我在 OSX 上遇到了这个问题。

原答案:

似乎 gpg update (of brew) 更改为 to 的位置gpggpg1您可以更改 git 查找 gpg 的二进制文件:

git config --global gpg.program gpg1

如果你没有 gpg1: brew install gpg1

更新的答案:

看起来 gpg1 已被弃用/
“轻轻地退出使用”,因此您可能实际上应该更新到
gpg2,不幸的是,这涉及更多步骤/一些时间:

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac

在旧自制软件上:

echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

在 M1 macs 等更新的系统上:

echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf 
killall gpg-agent

第一部分安装 gpg2,后者是使用它所需的 hack。对于故障排除,请参阅这个答案(虽然这是关于
linux 而不是 brew),它建议一个很好的测试:

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

如果此测试成功(没有错误/输出包含 PGP 签名),则您已成功更新到最新的 gpg 版本。

您现在应该可以再次使用 git 签名了!
值得注意的是,您需要:

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

注意:运行签名提交后,您可以验证它是否已签名:

git log --show-signature -1

这将包括最后一次提交的 gpg 信息。

2022-03-09