我关注了几篇关于Git 2.10发行说明中漂亮属性的文章。通过将 git 升级到 2.10.0 并对全局结果进行更改如下 -.gitconfig
.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 位 RSA 密钥,ID AAAAAAA,创建于 2016-07-01 错误:gpg 未能签署数据致命:未能写入提交对象
您需要一个密码来解锁密钥
用户:“XYZ(数字签名)”
2048 位 RSA 密钥,ID AAAAAAA,创建于 2016-07-01
错误:gpg 未能签署数据致命:未能写入提交对象
注意 - 我仍然可以使用git commit -a -m "message"
git commit -a -m "message"
有没有办法克服同样的问题? 或者在配置中需要进行任何更改gpg以配合 git 的升级?
gpg
更新 1
还寻求进一步的用处,遵循Is there a way to “autosign” commits in Git with a GPG key? . 我已经使用
git config --global user.signingkey ED5CDE14(with my key) git config --global commit.gpgsign true
并且很明显会得到同样的错误。
我在 OSX 上遇到了这个问题。
似乎 gpg update (of brew) 更改为 to 的位置gpg,gpg1您可以更改 git 查找 gpg 的二进制文件:
gpg1
git config --global gpg.program gpg1
如果你没有 gpg1: brew install gpg1。
brew install gpg1
看起来 gpg1 已被弃用/ “轻轻地退出使用”,因此您可能实际上应该更新到 gpg2,不幸的是,这涉及更多步骤/一些时间:
brew upgrade gnupg # This has a make step which takes a while brew link --overwrite gnupg brew install pinentry-mac
在旧自制软件上:
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf killall gpg-agent
在 M1 macs 等更新的系统上:
echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf killall gpg-agent
第一部分安装 gpg2,后者是使用它所需的 hack。对于故障排除,请参阅这个答案(虽然这是关于 linux 而不是 brew),它建议一个很好的测试:
echo "test" | gpg --clearsign # on linux it's gpg2 but brew stays as gpg
如果此测试成功(没有错误/输出包含 PGP 签名),则您已成功更新到最新的 gpg 版本。
您现在应该可以再次使用 git 签名了! 值得注意的是,您需要:
git config --global gpg.program gpg # perhaps you had this already? On linux maybe gpg2 git config --global commit.gpgsign true # if you want to sign every commit
注意:运行签名提交后,您可以验证它是否已签名:
git log --show-signature -1
这将包括最后一次提交的 gpg 信息。