使用git version 2.20.1
和官方指南,我运行以下命令来生成一个 pgp 密钥
$ gpg --full-generate-key
...
$ gpg --list-secret-keys --keyid-format LONG
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/mahmood/.gnupg/pubring.kbx
--------------------------------
sec rsa4096/CFEFE6D58A392624 2020-09-08 [SC]
26XX594XXXE2BAXXXE40AXXXCFXXX6D5XXXXX624
uid [ultimate] mahmood <EMAIL>
ssb rsa4096/3B138A448B277FD9 2020-09-08 [E]
现在我可以使用以下命令查看公钥:
$ gpg --armor --export CFEFE6D58A392624
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF9XdKoBEACyQjVUlBYjOLSqv7YRIIq0+iJ9A0UzkItUoWBnDrHmTdnH+UeK
...
=WCOk
-----END PGP PUBLIC KEY BLOCK-----
然后我根据这个官方页面复制了网站中的密钥。
现在,当我想提交时,我收到一个密钥签名错误:
$ git commit -S -m "...."
error: gpg failed to sign the data
fatal: failed to write commit object
我该如何解决?
更新:
导出以下变量将解决问题。
export GPG_TTY=$(tty)
我是怎么做到的?首先,我检查~/.gitconfig
以确保该[user]
部分是正确的。然后我运行了以下测试命令,它给了我一个 ioctl 错误
$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
test
gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
搜索该错误导致export GPG_TTY=$(tty)
然后测试命令很好。因此,commit 命令现在可以了。