我刚开始使用git,我通过自制软件安装git和gpg。 由于某种原因,当我提交git时,我得到了这个错误 我看了很多关于这个话题的stackoverflow问题,但没有一个对我有用。 如何修复此错误以成功上传?
error: gpg failed to sign the data
fatal: failed to write commit object
我刚开始使用git,我通过自制软件安装git和gpg。 由于某种原因,当我提交git时,我得到了这个错误 我看了很多关于这个话题的stackoverflow问题,但没有一个对我有用。 如何修复此错误以成功上传?
error: gpg failed to sign the data
fatal: failed to write commit object
当前回答
如果你之前已经安装了pinentry和gpg,它突然就不工作了:
检查你的gpg是否正常工作:
echo "test" | gpg --clearsign
如果它说gpg: signing failed: No pinentry, 只需重新启动GPG守护进程客户端,它会不时卡住:
gpgconf --kill gpg-agent
现在它应该工作了:
echo "test" | gpg --clearsign
其他回答
可能你的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
对于故障排除,首先要尝试两件事:
运行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用户名匹配。我猜邮件也要匹配。这可能与我在Mac上使用GPG钥匙串有关。不确定。
当我填写这个时,我以为我是在命名密钥,但我猜它是在询问我的名字(git用户名)。
如果你之前已经安装了pinentry和gpg,它突然就不工作了:
检查你的gpg是否正常工作:
echo "test" | gpg --clearsign
如果它说gpg: signing failed: No pinentry, 只需重新启动GPG守护进程客户端,它会不时卡住:
gpgconf --kill gpg-agent
现在它应该工作了:
echo "test" | gpg --clearsign
检查你的钥匙是否过期。一旦你修复了过期日期(不需要创建一个新的密钥,除非你想),git将正常工作。
修复过期密钥的一种方法:
(注:$表示命令行提示符,在提示符后输入命令;每个命令后按Enter键)
$ gpg2—list-keys查找合适的密钥id (pub行\后的字符)
$ gpg2——edit-key <key id> -打开GPG shell,提示符更改为GPG >
Gpg > expire -按照指示设置主键的新过期日期
接下来,如果有子键过期(子键显示在行中),也重置它们的过期日期:
Gpg > key 1 -选择第一个子密钥 Gpg > expire -按照指示为子密钥设置新的过期日期
根据需要,对每个后续子键重复此操作。