[英]Trying to sign commits on git using gpg on WSL but does not work
我最近尝试了 Linux 的 Windows 子系统,当我试图用最近生成的 GPG 密钥签署我的 git 提交时,它喷出来了,
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ git commit -S -m "gpg signing"
error: gpg failed to sign the data
fatal: failed to write commit object
我已经使用 git 足够长的时间了,我知道我必须在 git 上设置本地或全局变量才能使用我的 GPG 密钥。
在第一个错误之后,我尝试生成另一个密钥,但这也不起作用,包括子密钥。
我的 GPG 是用 RSA 和 RSA 加密的(默认)。
我曾尝试使用 help.github.com 上的文章,但无济于事。
(这里有一些具体的来源。) https://help.github.com/en/articles/telling-git-about-your-signing-key
https://help.github.com/en/articles/signing-commits
这是大部分终端日志
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ git config --global commit.gpgsign true
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ gpg2 --list-secret-keys --keyid-format LONG
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2021-08-22
/home/verticalfile30/.gnupg/pubring.kbx
---------------------------------------
sec rsa4096/498F47808959B459 2019-08-23 [SC] [expires: 2021-08-22]
A533C851D2905FC63C161831498F47808959B459
uid [ultimate] Vert Simon (Key#3) <stopmotion45c@gmail.com>
ssb rsa4096/E4E65BE559FFBE2C 2019-08-23 [E] [expires: 2021-08-22]
sec rsa4096/B3C88EE54DC15CC9 2019-08-23 [SC]
87F5399E6BFEF88C1C64794CB3C88EE54DC15CC9
uid [ultimate] Vert S (Sop) <stopmotion45c@gmail.com>
ssb rsa4096/E868623210106F9D 2019-08-23 [E]
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ git config --global user.signingkey E868623210106F9D
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ git commit -S -m "gpg signing"
error: gpg failed to sign the data
fatal: failed to write commit object
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ git config --global user.signingkey B3C88EE54DC15CC9
verticalfile30@DESKTOP-U284V9I:~/cpo/wsltest$ git commit -S -m "gpg signing"
error: gpg failed to sign the data
fatal: failed to write commit object
许多在线资源以及有关 Stack Overflow 的其他问题最终都说了同样的话,即设置全局变量。 有什么我忘记或出错了吗? 谢谢。
但在那种情况下,它是:
我的密钥有密码,但没有提示输入密码。
但后来我读到了这个:
第 3 步是
export GPG_TTY=$(tty)
,它将提示发送到 tty。
输入我的密码后,一切正常。
示例: danhorst/dotfiles
commit 805a779 ,它跟在gpg failed to sign the data fatal: failed to write commit object [Git 2.10.0] 之后。
按照以下网址设置签名提交https://help.github.com/en/articles/telling-git-about-your-signing-key
如果仍然得到 gpg 未能签署数据致命:未能写入提交对象
这不是 git 的问题,这是 GPG 的问题,请按照以下步骤操作
gpg --version
echo "test" | gpg --clearsign
如果它显示:
gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
然后使用export GPG_TTY=$(tty)
然后再试一次echo "test" | gpg --clearsign
echo "test" | gpg --clearsign
其中 PGP 签名。
输出:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
test
-----BEGIN PGP SIGNATURE-----
iLMEAQEKAB0WIQS2V0SFHi18psvDbo7uFF+LP7qc1gUCYLjB2QAKCRDuFF+LP7qc
1r5LBACB1m3Lpl21379qAvVamWcn9isdgdg34t34t43t34t34t434yGQHqikxWL7A5
Ls7giKZYscb30o0rkY6I1W9MjBBW96R2pnaYsioFpsf434dfg54rfdgfdgdfgdfpaIoU3k
JKrYxR7yMjqUv0a2jE+97kh+bSuzqwIkMHyikbABI90lY+4OLw==
=UHKx
-----END PGP SIGNATURE-----
git config -l | grep gpg
输出:
commit.gpgsign=true
gpg.program=gpg
tag.gpgsign=true
git config --global commit.gpgsign true
如果您使用 Kleopatra 在 Windows 中管理您的 GPG 密钥,您可以将以下内容添加到您的 WSL 环境中的 ~/.gitconfig (相应地更新您的路径):
[gpg]
program = /mnt/c/Program Files (x86)/GnuPG/bin/gpg.exe
添加后,提示输入我的 GPG 密钥密码的提示照常出现。
背景:在使用挂载卷时,使用 Docker 对我来说非常慢。 我决定只在 Ubuntu WSL 环境目录(即 ~/projects/my_project)中部署存储库,并使用 Docker WSL2 支持从那里部署容器。 我使用 Visual Studio Code,因此我可以直接在 WSL 环境中打开编辑器并在那里工作。 但是,我失去了签署我的承诺的能力。 因此,上述解决方案允许我保留现有的工作流程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.