我刚开始使用git,我通过自制软件安装git和gpg。 由于某种原因,当我提交git时,我得到了这个错误 我看了很多关于这个话题的stackoverflow问题,但没有一个对我有用。 如何修复此错误以成功上传?

error: gpg failed to sign the data
fatal: failed to write commit object

当前回答

什么是gpg: GNU Privacy Guard

用法:

GPG是确保双方安全通信的一种极好的方法。它允许敏感信息在不安全的网络上轻松共享。

简单的解决方案:

步骤1:检查密钥是否过期请做

gpg -K——keyid-format SHORT

步骤2:如果它没有过期

Git配置——global user.signingkey

其他回答

对我来说,这个错误开始发生在Debian GNU/Linux上的git标签-s,当我从pinentry-gnome3切换到pinentry-curses(使用update-alternatives——config pinentry)以方便远程访问时。它只发生在git标记-s时,而不是gpg(例如gpg——clearsign)本身。

在本例中,让它重新工作所需要的唯一更改是将export GPG_TTY=$(tty)添加到shell启动文件中。

我虽然没有得到“不适当的ioctl for device”错误消息,在这个问题的另一个答案中提到了这个修复的指示器。

注意:由于得到这个错误的原因与之前在这个问题的其他答案中建议导出GPG_TTY=$(tty)的原因完全不同(通常作为附带提示),所以我决定这个问题需要另一个答案,其中提到导出GPG_TTY=$(tty)可能是某些情况下的主要修复和唯一必要的东西。

什么是gpg: GNU Privacy Guard

用法:

GPG是确保双方安全通信的一种极好的方法。它允许敏感信息在不安全的网络上轻松共享。

简单的解决方案:

步骤1:检查密钥是否过期请做

gpg -K——keyid-format SHORT

步骤2:如果它没有过期

Git配置——global user.signingkey

如果您使用智能卡/yubikey存储您的GPG密钥,并且您通过存储在卡中的密钥设置了git配置的signkey(并且上面所有的答案似乎都不能解决您的问题),您的卡的PIN被阻塞可能是这个问题的根本原因。

检查被阻止的PIN码:

gpg --card-status

如果计数器类似于

Reader ...........: Yubico YubiKey
PIN retry counter : 3 0 3

然后你的PIN被阻止(3次不成功尝试后)。

解锁密码:

gpg --card-edit
gpg/card> admin
Admin commands are allowed

gpg/card> passwd
gpg: OpenPGP card no. … detected

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 2
PIN unblocked and new PIN set.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? q

在我的例子中,我混合了提交签名文档中给出的gpg配置和smimesign配置:https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing-key

在工作了几个小时之后,我发现纠正它的最好方法是取消与gpg相关的所有内容,并重新配置gpg。

正如在@Jason Thrasher的回答中提到的,使用以下方法找到所有与gpg相关的git配置:

git config -l | grep gpg

然后取消所有的golable以及本地使用:

git config --global --unset <config_name>
git config --local --unset <config_name>

然后按照上面给出的官方文档重新配置。 希望这能有所帮助。

如果它曾经工作,只是声明失败,杀死代理,再试一次:

gpgconf --kill gpg-agent

检查代理是否再次启动:

echo "test" | gpg --clearsign