我刚开始使用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
当前回答
我在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配置设置指针,它一直在工作。
其他回答
对我来说,这个错误开始发生在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)可能是某些情况下的主要修复和唯一必要的东西。
如果它曾经工作,只是声明失败,杀死代理,再试一次:
gpgconf --kill gpg-agent
检查代理是否再次启动:
echo "test" | gpg --clearsign
在我的情况下,我必须将存储在GitHub设置中的名称与键的名称和注释匹配。
所以如果gpg——list-keys返回uid [ultimate] Joe Blogs(花式注释)<email@example.com>你在.gitconfig中的名字应该是Joe Blogs(花式注释)。
最初,我将自己的名字设置为Joe Blogs, GPG不会找到我的密钥,并在strace中显示“无密钥”错误。不幸的是,如果没有strace,该错误就不会出现,并且会得到泛型
error: gpg failed to sign the data
fatal: failed to write commit object
参考@sideshowbarker和@Xavier Ho解决方案,我通过以下步骤解决了我的问题。
假设gpg2通过brew安装,
git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key
gpg2 -K --keyid-format SHORT
... - dpg gnupg - pubring。
sec rsa2048/0A61C6FC 2017-06-29 [SC][有效期:2019-06-29]
git config --global user.signingkey 0A61C6FC
经同事提醒,需要追加
export GPG_TTY=$(tty)
~ /。ZSHRC如果使用zsh,否则追加到~/.bash_profile
For macOS,
gpg2在brew中与GPG结合,因此GPG命令指向gpg2
brew install gpg2
酿造信息GPG
Gnupg:稳定2.2.6(瓶装)
git config --global gpg.program gpg
gpg -K --keyid-format SHORT
还有pinentry-mac用于密码输入
brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf
添加一行
pinentry-program /usr/local/bin/pinentry-mac
经同事提醒,需要追加
export GPG_TTY=$(tty)
~ /。ZSHRC如果使用zsh,否则追加到~/.bash_profile
在我的例子中,当在一个小的tmux窗口上运行git提交时,这个错误发生了,这个窗口不能适合密码短语提示。
$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
test
gpg: signing failed: Screen or window too small
gpg: [stdin]: clear-sign failed: Screen or window too small