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

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

当前回答

我在macos上出现了这个错误-为了尝试和排除故障,我尝试使用gpg2—list-keys列出密钥,看看它们是否已经过期-我验证了密钥没有过期,并且使用git config—global user.signingkey在我的配置中设置了正确的密钥。

在我运行这些命令之后,我突然能够再次毫无问题地进行签名提交。我没有改变我的配置文件或密钥-我甚至没有创建一个新的终端实例。我的mac上的gpg2似乎处于一种奇怪的状态。

其他回答

我在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配置设置指针,它一直在工作。

我正在使用它。它支持zsh和工作在Windows子系统Linux:

export GPG_TTY=$(tty)

其他用户已经确认以上是MacOS(例如Catalina 10.15.7)所需的唯一更改。对于mac,将以上内容添加到~/.zshrc。

在使用WSL2的Windows中的Linux容器中也可以工作。

我在macos上出现了这个错误-为了尝试和排除故障,我尝试使用gpg2—list-keys列出密钥,看看它们是否已经过期-我验证了密钥没有过期,并且使用git config—global user.signingkey在我的配置中设置了正确的密钥。

在我运行这些命令之后,我突然能够再次毫无问题地进行签名提交。我没有改变我的配置文件或密钥-我甚至没有创建一个新的终端实例。我的mac上的gpg2似乎处于一种奇怪的状态。

对我来说,这个错误开始发生在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。编程到gpg的绝对路径:

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

我正在使用Windows cygwin。