我参考了几篇关于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

很明显得到了相同的错误。


当前回答

我一定是不小心更新了gpg,因为我在尝试测试gpg是否工作后得到了这个:

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

运行gpgconf—kill all为我解决了这个问题。

其他回答

我也遇到了同样的问题。我很高兴地报告,问题不在于git 2.10.0,而在于gnupg 1.4.21。

暂时将gnupg降级到1.4.20为我解决了这个问题。

如果你正在使用自制程序,并且像我一样升级了你的包,你可能只需要运行brew开关gnupg 1.4.20来恢复。

确保你的邮箱设置正确。

git config --global user.email "user@example.com"

如果你不想处理brew来安装gpg,这似乎时不时会遇到问题,只需从gpg tools下载gpg工具。

在执行向导时,单击customize install并取消选择邮件插件(除非您想使用它)。这些工具似乎没有遇到任何问题,而且它会在你第一次签署提交后记住你的密码。不需要额外的配置,除了告诉git使用哪个键。

至少这是我的经验。

在使用cygwin时,我最近改用了gpg2。然后,在设置git config gpg后,我也遇到了同样的问题。程序gpg2。

尝试echo "test" | gpg2——clearsign查看gpg2是否正常工作。我发现这是最简单的解决方案,只是设置git配置gpg。编写gpg,因为这是可行的。但你也会得到一个更好的错误这种方式-例如,你需要安装pinentry。

在我的例子中,没有一个解决方案是有效的,因为我没有手动进入~/。我创建的新密钥不再是旧的X.509密钥,因此我删除了以下密钥,然后我的新密钥开始工作。

[gpg]
    program = gpg
    format = x509
[gpg "x509"]
    program = smimesign