Git错误: 在Linux系统上,gpg未能对数据进行签名

11

我在签署提交时遇到了问题。使用以下git配置:

user.name=Bob
user.email=[bob's email]
user.signingkey=ABCDEFGH
user.user=bob1
gpg.program=gpg2

我被告知只需包含秘钥的前八个字符。

在暂存后,执行 git commit -S -m "commit message" 命令时,我收到以下错误信息:

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

看起来遇到这个错误的大多数用户都是在Mac上并且需要进行一些额外设置。但我在Kali Linux上。

有什么建议吗?

似乎大多数遇到此错误的用户都是使用Mac电脑,并且需要进行一些额外的设置。但我在Kali Linux上。你有什么建议吗?


Gpg无法对数据进行签名 致命错误: 无法写入提交对象。可使用git commit -vvv -S ...来获取更多信息。 - jww
@jww 对我来说,这根本没有改变输出。我的签名密钥只是过期了。 - peter.babic
3个回答

24

我被告知只包含秘钥的前八个字符。

user.signingkey的值是一个密钥ID,用于标识git在生成签名时应使用哪个密钥。

官方文档中有一个完整的示例展示了这应该如何工作。如果gpg --list-keys显示如下内容:

/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub   2048R/0A46826A 2014-06-04
uid                  Scott Chacon (Git signing key) <schacon@gmail.com>
sub   2048R/874529A9 2014-06-04

那么密钥 ID 为0A46826A

git config --global user.signingkey 0A46826A

1
谢谢,这很有帮助。我误解了密钥长度。我提供了前8个字符,因为2048R使用八个字符,而RSA4096输出更长的密钥。在清理git配置并使用--global设置值(指定完整密钥)后,它起作用了! - pmcg521
缺失的其中一个要素是,与 gpg 密钥相关联的电子邮件应该由 Github 进行验证。前往您的 Github 个人资料并将此新电子邮件添加到您的 Github 个人资料中,之后,Github 将向您发送一封验证电子邮件,当您单击该电子邮件中的按钮时,您的 gpg 密钥将被标记为已验证。起初,我认为对我的某个 repo 进行签名提交推送将验证我的 gpg 密钥,但事实并非如此。其次,我还以为将我的 gpg 密钥发布到 keyserver.ubuntu.com 将验证我的 gpg 密钥,但也不是这样。 - daparic
这是唯一对我有帮助的。我正在使用macOS,配合gpg2和pinentry-mac。 - sunsoft

8

我在使用WSL(Ubuntu)时也遇到了同样的问题。对我来说可行的解决方案是将 export GPG_TTY=$(tty) 添加到 ~/.bashrc 文件中,感谢这个答案


4

对于那些按照答案操作但无法使其工作的人。有可能你已经尝试了其他解决方案,然后意外地执行了这个命令(这是针对MacOSX而不是Linux的)

git config --global gpg.program=gpg2

如果你使用的是MacOSX,那么你应该只执行这个命令。 对于Linux系统,你需要先通过运行以下命令 unset 来取消设置此项(因为你的系统使用的是gpg不是gpg2)。

git config --global --unset gpg.program

现在你可以按照本页上的被接受的回答来告诉Git使用你的密钥。


1
git config --global --unset gpg.program 帮了我,谢谢! - Punit Naik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接