我刚开始使用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
当前回答
如果你使用的是windows powershell(5.1+),我想这个命令可以工作。
使用此命令获取GPG程序路径。
(Get-Command gpg).Path
在获取路径之后,复制路径。 使用这个命令
git config gpg.program <your path>
试着做出承诺。 编码快乐! !
其他回答
如果您使用智能卡/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
对我来说,一个简单的brew卸载gnupg && brew桶重新安装gpg-suite解决了这个问题。
它会手动卸载(在我的情况下)自定义安装的gpg,并重新安装整个gpg套件。
你的git以某种方式配置为GPG签署每次提交。使用GPG签名不需要使用git提交或推送。它很可能会给出错误,因为您的gpg签名机制还没有配置。
如果您是git的新手,请尝试在一开始不使用GPG签名的情况下让它工作,然后在确实需要时添加签名。
你可以通过以下方法验证git是如何配置gpg的:
git config -l | grep gpg
它可以产生零或多行,包括:
commit.gpgsign=true
如果“提交。“Gpgsign”为真,则启用了GPG签名。禁用它:
git config --global --unset commit.gpgsign
然后尝试再次运行提交。现在它应该在没有gpg签名的情况下运行。在基本的git工作之后,您应该尝试将gpg签名重新添加到组合中。
我在linux/windows平台上都有这个问题,在我的情况下,我只需要更仔细地注意输出。这是令人难以置信的,因为我可以使用相同的设置在其他回购中签署提交。
git commit -m "test signing"
gpg: skipped "***63231079***": No secret key
gpg: signing failed: No secret key
error: gpg failed to sign the data
fatal: failed to write commit object
我强调了“跳过”这一行。请注意,有时当你克隆一个回购时,他们会分配一个密钥:这个问题让我很困惑,以至于我破坏了我可以访问的分叉回购,并在github上重新分叉。然后因为我在想“全局配置”,我从来没有想过要看本地回购配置,当我注意到这一点:
[user]
signingkey = 63231079
嗯,当然它不会工作nimrod, git默认为本地设置,所以这就是为什么你的密钥永远不会被拾取。我通过git配置设置指针,它一直在工作。
这在ubuntu 18.04上对我有效
检查你的gpg密钥
gpg -K --keyid-format LONG
如果得到空白响应,则生成一个GPG密钥
gpg --generate-key
重新运行第一个命令,你应该得到一个输出:
sec rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid [ultimate] yourname<your_email>
ssb rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]
设置git签名密钥
git config --global user.signingkey 95A854E0593B3214
然后你就可以开始了!(——global是可选的)
或者,如果您不介意用ssh密钥签名
git config commit.gpgsign false
请注意,由于这里和这里的问题存在安全问题,不建议这样做