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

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

当前回答

当你的git配置中的key过期时,同样的错误也会引起。

请检查cat .git/config的内容,查找signingkey value是否过期。如果是,更新为新的。

其他回答

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

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

对于故障排除,首先要尝试两件事:

运行gpg——version,并确保安装了GnuPG版本2+(而不是版本1) 执行echo "test" | GPG——clearsign命令,确认GPG本身在工作

如果一切看起来都没问题,接下来要尝试的一件事是:

运行brew install pinentry以确保您已经安装了用于密码短语输入的良好工具

如果在安装之后,你再次尝试git提交,仍然得到一个“failed to sign the data”错误,请执行:

执行gpgconf——kill gpg-agent命令杀死任何可能挂起的正在运行的代理


否则,运行一些基本步骤来检查你是否有一个正常工作的GnuPG环境:

执行gpg -K——keyid-format SHORT命令,检查至少有一个密钥对没有过期

如果输出显示你没有供GnuPG使用的密钥,你需要创建一个:

运行gpg——gen-key,让GnuPG引导您完成创建密钥对的步骤


如果你得到一个错误消息说“不合适的ioctl为设备”,这样做:

运行export GPG_TTY=$(tty)和/或将其添加到~/。Bashrc或~ /.bash_profile

可能你的Git配置设置为gpgsign = true。如果你不想指定你的提交,试着把它设置为false。转到存储库文件夹并更改该文件

纳米git -配置。

从这个……

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

这……

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false

如果您使用智能卡/yubikey存储您的GPG密钥,并且您通过存储在卡中的密钥设置了git配置的signkey(并且上面所有的答案似乎都不能解决您的问题),您的卡的PIN被阻塞可能是这个问题的根本原因。

检查被阻止的PIN码:

gpg --card-status

如果计数器类似于

Reader ...........: Yubico YubiKey
PIN retry counter : 3 0 3

然后你的PIN被阻止(3次不成功尝试后)。

解锁密码:

gpg --card-edit
gpg/card> admin
Admin commands are allowed

gpg/card> passwd
gpg: OpenPGP card no. … detected

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 2
PIN unblocked and new PIN set.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? q

当你的git配置中的key过期时,同样的错误也会引起。

请检查cat .git/config的内容,查找signingkey value是否过期。如果是,更新为新的。