我刚开始使用git,我通过自制软件安装git和gpg。 由于某种原因,当我提交git时,我得到了这个错误 我看了很多关于这个话题的stackoverflow问题,但没有一个对我有用。 如何修复此错误以成功上传?
error: gpg failed to sign the data
fatal: failed to write commit object
我刚开始使用git,我通过自制软件安装git和gpg。 由于某种原因,当我提交git时,我得到了这个错误 我看了很多关于这个话题的stackoverflow问题,但没有一个对我有用。 如何修复此错误以成功上传?
error: gpg failed to sign the data
fatal: failed to write commit object
当前回答
可能你的Git配置设置为gpgsign = true。如果你不想指定你的提交,试着把它设置为false。转到存储库文件夹并更改该文件
纳米git -配置。
从这个……
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@bitbucket.org:yourrepo/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[user]
signingkey = <GPG-KEY>
[commit]
gpgsign = true
这……
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@bitbucket.org:yourrepo/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[user]
signingkey = <GPG-KEY>
[commit]
gpgsign = false
其他回答
我正在使用它。它支持zsh和工作在Windows子系统Linux:
export GPG_TTY=$(tty)
其他用户已经确认以上是MacOS(例如Catalina 10.15.7)所需的唯一更改。对于mac,将以上内容添加到~/.zshrc。
在使用WSL2的Windows中的Linux容器中也可以工作。
Git需要知道它是用哪个密钥签名的。
在您设置了GPG、GPG -agent和GPG .conf文件(请参阅本指南)之后,您需要运行
git config --global user.signingKey EB11C755
显然,要用您自己的公钥替换最后的公钥。如果您希望在默认情况下对每个提交进行签名,请使用
git config --global commit.gpgsign true
$ gpg2 -K --keyid-format SHORT # <-- Shows your keys, e.g.:
/home/<username>/.gnupg/pubring.kbx
-------------------------------
sec rsa4096/0754B01E 2019-02-02 [SCA] <--secret key
C396BF3771782D7691B0641145E11B080754B01E
uid [ultimate] John Doe <user@domain.com>
ssb rsa4096/A20AB8EC 2019-02-02 [E] <--public key
sec rsa4096/25C504D5 2019-02-02 [SCA] [revoked: 2020-06-01]
08BFF49B9E07E4B4B0C4946B645B6C1425C504D5
uid [ revoked] John Doe <user2@domain.com>
uid [ revoked] [jpeg image of size 2670]
其中A20AB8EC是本例中要查找的键ID。
对我有用的故障安全措施:重启我的机器。
这种做法很严厉,而且最终可能无法阻止问题再次出现。但我也遇到了同样的问题,尝试了几乎所有答案的解决方案,但运气不佳。
在这里添加它,希望它能解除其他人在我的情况:)
如果你之前已经安装了pinentry和gpg,它突然就不工作了:
检查你的gpg是否正常工作:
echo "test" | gpg --clearsign
如果它说gpg: signing failed: No pinentry, 只需重新启动GPG守护进程客户端,它会不时卡住:
gpgconf --kill gpg-agent
现在它应该工作了:
echo "test" | gpg --clearsign
对于我的带有GUI和gpg 2.2.19的Linux系统,无论是杀死gpg-agent(它会重新启动自己),取消$DISPLAY或设置$GPG_TTY都对我有效,因为它试图使用pinentry-gnome从控制台询问密码。我的钥匙还没有过期。
从一个超级用户的回答类似的问题,如何迫使GPG使用控制台模式pinentry提示密码?,如果您的系统有GNOME之类的GUI,并且包管理器配置为使用GUI pinentry程序,也会出现这个问题,这就是它挂起的原因。
我不得不切换到pinentry-tty来让GPG再次对消息进行签名。在Ubuntu上,这可以通过下面链接中的步骤来完成:
sudo apt install pinentry-tty
sudo update-alternatives --config pinentry
第二个命令将向您显示pinentry程序列表,并要求您输入一个数字来选择一个,因此键入与pinentry-tty对应的数字,然后无需任何额外的工作,签名消息(和git提交)将再次工作。