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

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

当前回答

在我的情况下,我必须将存储在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

其他回答

我解决了安装brew install gpg2然后做git配置——global gpg的问题。程序gpg2

对我来说,一个简单的brew卸载gnupg && brew桶重新安装gpg-suite解决了这个问题。

它会手动卸载(在我的情况下)自定义安装的gpg,并重新安装整个gpg套件。

经过大量搜索,我发现gpg密钥是我的情况下的问题。

如果您的gpg密钥正确,您可以尝试运行gpg——status-fd=2 -bsau <您的gpg密钥>。

要更新正确的密钥,请执行以下操作: 检查密钥使用:GPG——list-secret-keys——keyid-format=long

它应该有以下输出:

/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

然后更新密钥使用:

git config --global user.signingkey 3AA5C34371567BD2

现在再次检查提交,如果关键字是问题,它应该成功。您需要设置密码短语来更新密钥,您可以使用GitHub文档进行更新。

更多详情见:https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374

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

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

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

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

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

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

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

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

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

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