Warm tip: This article is reproduced from serverfault.com, please click

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

(github - gpg failed to sign the data fatal: failed to write commit object [Git 2.10.0])

发布于 2016-09-14 15:42:05

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 AAAAAAAAA,创建于 2016-07-01

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

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

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


更新 1

还寻求进一步的用处,遵循有没有办法使用 GPG 密钥在 Git 中“自动签名”提交?. 我已经使用

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

很明显,无论如何都会出现相同的错误。

Questioner
Naman
Viewed
23
Andy Hayden 2017-11-20 05:34:05

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

原答案:

这似乎是一个GPG更新(酿造)改为位置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

第一部分安装 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 信息。