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

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


当前回答

我在Ubuntu 18.04上得到了同样的错误,也担心了几个星期。 最后意识到gpg2没有指向任何东西。 所以简单地运行

git config --global gpg.program gpg

然后,它就像魅力一样。

您的提交现在将带有验证标记。

其他回答

如果与GPG密钥的uid相关联的电子邮件与您在git中使用的电子邮件不同,则需要向密钥添加另一个用户id,或者使用与电子邮件完全匹配的密钥。

您可以通过以下方式添加另一个UID:

$ GPG—编辑键

见莫https://superuser.com/questions/293184/one-gnupg-pgp-key-pair-two-emails

对于在MacOS机器上遇到此问题的任何人,请尝试以下方法:

brew uninstall gpg brew install gpg2 brew install pinentry-mac (if needed) gpg --full-generate-key Create a key by using an algorithm. Get generated key by executing: gpg --list-keys Set the key here git config --global user.signingkey <Key from your list> git config --global gpg.program /usr/local/bin/gpg git config --global commit.gpgsign true If you want to export your Key to GitHub then: gpg --armor --export <key> and add this key to GitHub at GPG keys: https://github.com/settings/keys (with START and END line included)

如果问题仍然存在:

Test -r ~/。bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

如果问题仍然存在:

安装https://gpgtools.org并通过从菜单栏按下sign来签署您使用的密钥:key -> sign

如果问题仍然存在:

转到:⁨你的全局。gitconfig文件,在我的例子中是:⁨/Users/gent/.gitconfig 并修改.gitconfig文件(请确保Email和Name与您在生成Key时创建的相同):

(用户) 邮箱= gent@youremail.com name = Gent signingkey = <YOURKEY> (gpg) 程序= /usr/local/bin/gpg (提交) Gpsign = true Gpgsign = true (过滤“lfs”) Process = git-lfs filter-process Required = true 清洁= git-lfs清洁——%f 涂抹= git-lfs涂抹——%f (证书) Helper = osxkeychain

我得到这个错误,每次登出,然后再次登录我的macOS。解决方案只是一个简单的命令:

killall gpg-agent

我认为这只是gpg代理的一个错误,杀死它,然后重新工作。

GIT_TRACE=1显示了git实际在做什么:

$ GIT_TRACE=1 git commit -m "example commit message"
20:52:58.902766 git.c:328               trace: built-in: git 'commit' '-vvv' '-m' 'example commit message'
20:52:58.918467 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' '23810377252EF4C2'
error: gpg failed to sign the data
fatal: failed to write commit object

现在手动运行失败命令:

$ echo "dummy" | gpg -bsau 23810377252EF4C2
gpg: skipped "23810377252EF4C2": Unusable secret key
gpg: signing failed: Unusable secret key

原来我的钥匙过期了,这不是我的错。

我也见过类似的答案,但没有一个完全适合我。在Linux上,我必须杀死并重新启动我的gpg-agent:

$ pkill gpg-agent
$ gpg-agent --daemon
$ git commit ...

这招对我很管用。看起来你确实需要用户。Signingkey设置为您的私钥,以及从其他一些评论说。

$ git config --global user.signingkey [your_key_hash]