使用Git签署提交时不需要输入我的密码短语。

16
我试图使用命令 git commit -S 为我的提交签名,但它失败了,没有提示我输入我的GPG密钥密码。
错误信息如下:
error: gpg failed to sign the data
fatal: failed to write commit object

我发现如果在执行 git commit -S 命令之前运行以下命令:

gpg -o /dev/null --local-user MY_KEY_ID -as <(echo 1234) && echo "The correct passphrase was entered for this key"

...一切运行良好,我的提交已经被正确签署。我认为这是因为我的密码短语被缓存了,但这不是我期望的行为。

我希望每次想要签署提交或标记时,Git都会提示输入我的密码短语。

"解锁我的密钥"命令可以在这个问题中找到:如何使用gpg命令行检查密码短语是否正确

2个回答

16

你可能需要告诉 pinentry,gpg 用于提示输入密码的软件,应该在哪里提示你。

export GPG_TTY=$(tty)
git commit -S
如果这个方法有效,我建议在您的shell的'rc'文件中导出GPG_TTY
有关GPG_TTY的信息,请参阅gpg-agent文档

3
它工作得非常好,你有没有我错过的相关文档? - Oscar
2
编辑了我的答案,添加了一些 GPG 文档。实际上,在设置 git 配置文件的签名提交时,我遇到了同样的问题。从 git 方面来看,这似乎没有很好地记录下来。 - Max Friederichs
如果您通过SSH登录到通常使用键盘/鼠标和GUI访问的机器时遇到此错误,例如Ubuntu桌面(在我的情况下为20.04),则此解决方案也适用。 - starbeamrainbowlabs

1

对我来说,取消设置并重新设置签名密钥非常有效。

如果您要将签名密钥更改为另一个密钥或Git突然停止提示输入密码,这都适用。

// remove signing key
git config --unset user.signingkey

// add new signing key
git config user.signingkey SECRETKEYLONGID

// tell git to automatically sign every commit
git config commit.gpgsign true

// commit as usual
git commit -m "commit message"

Git 解释 如何获取签名密钥的长标识符。

就是这样!希望它能派上用场。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接