Git错误-gpg无法对数据进行签名
我刚开始使用git,并通过自制安装git和gpg。 出于某种原因,我在执行git commit时出现了这个错误 我看了那么多关于这个话题的其他问题,没有一个对我有用。 如何修复此错误以便成功上载Git错误-gpg无法对数据进行签名,git,gnupg,Git,Gnupg,我刚开始使用git,并通过自制安装git和gpg。 出于某种原因,我在执行git commit时出现了这个错误 我看了那么多关于这个话题的其他问题,没有一个对我有用。 如何修复此错误以便成功上载 error: gpg failed to sign the data fatal: failed to write commit object 对于故障排除,首先要尝试两件事: 运行git config--global gpg.program gpg2,以确保git使用gpg2而不是gpg 运行ec
error: gpg failed to sign the data
fatal: failed to write commit object
对于故障排除,首先要尝试两件事:
- 运行
,以确保git使用git config--global gpg.program gpg2
而不是gpg2
gpg
- 运行
,以确保echo“test”| gpg2--clearsign
本身工作正常gpg2
- 运行
,确保已安装用于输入密码短语的良好工具brew install pinentry
git commit
,但仍然收到“未能对数据签名”错误:
- 运行
gpgconf--kill gpg agent
以杀死任何可能挂起的正在运行的代理
如果上面说未安装gpgconf
或没有--kill
选项,您可以尝试以下操作:
cp~/.gnupg~/.gnupg GOOD
保存~/.gnupg
的副本,以便在以后需要时还原到
brew安装gnupg21
安装GNUPG2.1
保存~/.gnupg
目录副本的原因是,gnupg 2.1可能会以与gnupg 2.0及更早版本不向后兼容的方式创建/更改一些关键数据,因此如果您想稍后返回,可以执行mv~/.gnupg~/.gnupg21&&mv~/.gnupg GOOD~/.gnupg
否则,需要运行一些基本步骤来检查您是否有一个正常工作的GnuPG环境:
- 运行
gpg2-K--keyid format SHORT
,检查您是否至少有一个密钥对
如果它的输出显示您没有可供GnuPG使用的密钥,那么您需要创建一个密钥:
- 运行
gpg2--gen key
,让GnuPG引导您完成创建密钥对的步骤
如果您收到一条错误消息说“设备的ioctl不合适”,请执行以下操作:
- 运行
export GPG\u TTY=$(TTY)
和/或将其添加到您的~/.bashrc
或~/.bash\u配置文件中
不知何故,您的git被配置为对每次提交进行GPG签名。使用git提交或推送不需要使用GPG签名。很可能是由于您的gpg签名机制尚未配置而出现错误
如果您是git新手,请尝试先让它工作起来,而不要先进行GPG签名,如果确实需要,请稍后添加登录
您可以通过执行以下操作来验证git是如何配置gpg的:
git config -l | grep gpg
可能产生零行或多行,包括:
commit.gpgsign=true
如果“commit.gpgsign”为true,则启用了gpg签名。使用以下命令禁用它:
git config --global --unset commit.gpgsign
然后再次尝试运行提交。它现在应该在没有gpg签名的情况下运行。在基本git工作之后,应该尝试将gpg签名添加回混合中 Git需要知道它是用哪个密钥签名的
设置好GPG、GPG代理和GPG.conf文件(请参阅)后,需要运行
git config --global user.signingKey EB11C755
显然,最后用您自己的公钥替换公钥。如果希望默认情况下对每个提交进行签名,请使用
git config --global commit.gpgsign true
$gpg2-K--keyid format SHORT#我制作了一个git
密钥,其中有3个单独的密钥用于认证
/签名
/加密
&该密钥在未来显示为过期(在正常工作几天后):
pub rsa4096/4CD1E9DA 2017-04-26[C][到期日期:2017-04-28]
钥匙指纹=4670 59C1 7592 08B8 7FA5 313B 2A42 B6A6 4CD1 E9DA
uid[过期]Stuart Cardall(GIT开发密钥)
子rsa4096/5195E715 2017-04-26[E][到期日期:2019-04-26]
sub-rsa4096/DB74C297 2017-04-26[S][到期日期:2019-04-26]
sub-rsa2048/A3913A3C 2017-04-28[]已到期:未到期]
创建了一个新密钥,但没有添加单独的子密钥来解决此问题。检查您的密钥是否过期。一旦您确定了过期日期(除非您愿意,否则无需创建新密钥),git
将正常工作
修复过期密钥的一种方法:
(注意:$
表示命令行提示,在提示后键入命令;在每个命令后按Enter键)
$gpg2——列出键
以查找相应的键id(在pub
行上\
之后的字符)
$gpg2——编辑键
-这将打开gpg外壳,提示更改为gpg>
gpg>过期
-按照说明为主键设置新的过期日期
接下来,如果有过期的子项(sub
显示在行上),也重置它们的过期日期:
gpg>键1
-选择第一个子键
gpg>过期
-按照说明为子密钥设置新的过期日期
根据需要,对每个后续子项重复此操作。GPG密钥过期时也可能发生此错误。生成一个新密钥并将其添加到Git应该可以解决这个问题。参考@sideshowbarker和@Xavier Ho solution,我通过以下步骤解决了我的问题
假设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
…/.gnupg/pubring.gpg
sec rsa2048/0A61C6FC2017-06-29[SC][到期日期:2019-06-29]
同事提醒,需要追加
export GPG_TTY=$(tty)
export GPG_TTY=$(tty)
如果使用zsh,则附加到~/.zshrc,否则附加到~/.bash_配置文件
对于macOS,
gpg2与brew中的gpg组合,因此gpg命令指向gpg2
brew install gpg2
brew信息gpg
gnupg:稳定2.2.6(瓶装)
还有pinentry mac用于输入密码短语
brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf
添加行
pinentry计划/usr/local/bin/pinentry mac
同事提醒,需要追加
export GPG_TTY=$(tty)
export GPG_TTY=$(tty)
如果使用zsh,则附加到~/.zshrc,否则附加到~/.bash_profile可能是您的Git配置文件
brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf
export GPG_TTY=$(tty)
[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
export GPG_TTY=$(tty)
gpg -K --keyid-format LONG
gpg --generate-key
sec rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid [ultimate] yourname<your_email>
ssb rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]
git config --global user.signingkey 95A854E0593B3214
git config commit.gpgsign false
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
gpg --card-status
Reader ...........: Yubico YubiKey
PIN retry counter : 3 0 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
Issue: Disabled loopback pinentry mode
git config -l | grep gpg
git config --global --unset <config_name>
git config --local --unset <config_name>
$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
test
gpg: signing failed: Screen or window too small
gpg: [stdin]: clear-sign failed: Screen or window too small
error: gpg failed to sign the data
fatal: failed to write commit object
sudo apt install pinentry-tty
sudo update-alternatives --config pinentry
git commit -m "test signing"
gpg: skipped "***63231079***": No secret key
gpg: signing failed: No secret key
error: gpg failed to sign the data
fatal: failed to write commit object
[user]
signingkey = 63231079
gpgconf --kill gpg-agent
echo "test" | gpg --clearsign
GIT_TRACE=1 git commit -S -m "this will tell you wich intern git command failed"
git config --list --show-scope --show-origin
git config --local gpg.x509.program gpg