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

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

当前回答

当GPG密钥过期时,也会发生此错误。生成一个新密钥并将其添加到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

这在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

请注意,由于这里和这里的问题存在安全问题,不建议这样做

检查你的钥匙是否过期。一旦你修复了过期日期(不需要创建一个新的密钥,除非你想),git将正常工作。

修复过期密钥的一种方法:

(注:$表示命令行提示符,在提示符后输入命令;每个命令后按Enter键)

$ gpg2—list-keys查找合适的密钥id (pub行\后的字符)

$ gpg2——edit-key <key id> -打开GPG shell,提示符更改为GPG >

Gpg > expire -按照指示设置主键的新过期日期

接下来,如果有子键过期(子键显示在行中),也重置它们的过期日期:

Gpg > key 1 -选择第一个子密钥 Gpg > expire -按照指示为子密钥设置新的过期日期

根据需要,对每个后续子键重复此操作。

参考@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