我参考了几篇关于Git 2.10发行说明中的漂亮属性的文章。将git升级到2.10.0,并对全局的.gitconfig进行了更改,结果如下-
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[user]
name = xyz
email = abc.def@gmail.com
signingkey = AAAAAAA
[core]
excludesfile = /Users/xyz/.gitignore_global
editor = 'subl' --wait
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[alias]
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
old = red strike
new = green italic
但是现在我尝试使用
git commit -a -S -m "message"
我看到下面的错误-
你需要一个密码来解锁秘钥
用户:“XYZ(数字签名)”
2048-bit RSA key, ID AAAAAAAA, created 2016-07-01
错误:GPG数据签名失败致命:写提交失败
对象
注意-我仍然可以使用git commit -a -m "message"来提交更改
有办法克服同样的问题吗?或者在gpg配置中需要做任何改变以适应git的升级?
更新1
还寻求进一步的有用性,以下是是否有一种方法在Git中使用GPG密钥“自动签名”提交?我已经配置了密钥使用
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
很明显得到了相同的错误。
我在构建最新的Git源代码(2.12.2)时遇到了类似的问题,同时还构建了所有依赖项的最新源代码(Zlib、Bzip、cURL、PCRE、ReadLine、IDN2、iConv、Unistring等)。
结果libreadline给GnuPG带来了问题:
$ gpg --version
gpg: symbol lookup error: /usr/local/lib/libreadline.so.7: undefined symbol: UP
当然,尝试用-vvv从Git中获取有用的信息失败了,所以失败是一个谜。
要解决由于ReadLine导致的PGP失败,请遵循不能更新或使用包管理器—gpg错误的说明:
在终端:
ls /usr/local/lib
这里有很多readline lib (libreadline。so。blah - blah)
所以我:
苏
mkdir临时
Mv /usr/local/lib/libreadline* temp
ldconfig
我的解决方案是:
首先,我试图了解为什么这是行不通的细节。在终端上按cmd命令尝试
$ echo "Hello" > test.txt
$ gpg --sign --default-key <your-email-id> test.txt
观察到详细信息错误:gpg: signing failed: No pinentry
gpg-agent[59045]: can't connect to the PIN entry module '/usr/local/bin/pinentry': IPC connect call failed .日志含义
gpg-agent[59045]: failed to unprotect the secret key: No pinentry .日志含义
从终端我点击下面的cmd:
cat ~/.gnupg/gpg-agent.conf
检查以下陈述是否存在。如果gpg-agent.conf中没有,需要添加
pinentry-program
/usr/local/MacGPG2/libexec/pinentry-mac.app /内容/ MacOS / pinentry-mac
添加pinentry路径后,运行
$ gpgconf --kill gpg-agent
$ gpg --sign --default-key <your-email-id> test.txt
查看输出:
gpg: using <your-email-id> as default secret key for signing
我在Ubuntu 18.04上得到这个错误,原来我的密钥过期了。
为了看到这个,我运行了这个,它确认我的密钥过期了:
gpg --list-keys
为了纠正这个错误,我运行(使用之前命令中显示的ID):
gpg --edit-key <ID>
从那里,我延长了键0和键1的过期时间,遵循这些指令,最后输入键0,然后过期,并按照提示进行操作。然后重复键1。
之后,为了测试这一点,我运行:
echo test | gpg --clearsign
在修复之前,它失败了,错误如下:
gpg: no default secret key:无默认密钥
gpg: [stdin]: clear-sign failed: No secret key
但是在修复之后,相同的命令成功地对消息进行了签名,所以我知道事情又开始工作了!