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

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

当前回答

我必须修好gpg。编程到gpg的绝对路径:

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

我正在使用Windows cygwin。

其他回答

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

我正在使用它。它支持zsh和工作在Windows子系统Linux:

export GPG_TTY=$(tty)

其他用户已经确认以上是MacOS(例如Catalina 10.15.7)所需的唯一更改。对于mac,将以上内容添加到~/.zshrc。

在使用WSL2的Windows中的Linux容器中也可以工作。

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

运行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

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

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