goland 在 wsl2 git commit 签名时报错

2023-10-17 10:08:19 +08:00
 proxytoworld

在使用 goland 的 git 尝试提交时会出现如下错误

error: gpg failed to sign the data:
[GNUPG:] KEY_CONSIDERED ...... 2
[GNUPG:] BEGIN_SIGNING H10
[GNUPG:] PINENTRY_LAUNCHED 1401 gnome3:curses 1.2.1 - xterm-256color :0.0 - 1000/1000 -
gpg: signing failed: Inappropriate ioctl for device
[GNUPG:] FAILURE sign 83918950
gpg: signing failed: Inappropriate ioctl for device
fatal: failed to write commit object

因为配置了 GPG 签名,commit 时要输入 GPG 密钥的密码,网上查找错误,都让配置export GPG_TTY=($tty),我把这个加到了~/.zshrc,但使用 goland 提交时还是会这样

我在 goland 的 terminal 手动 git commit 时能够正常弹出

985 次点击
所在节点    Go 编程语言
5 条回复
chancefyi
2023-10-17 11:05:52 +08:00
遇到过这个问题,很烦,成为我放弃 wsl 的原因之一
LindsayZhou
2023-10-17 11:43:42 +08:00
我不用 goland ,不过提供一些思路
1. .zshrc 是不一定会执行的,参考 https://medium.com/@rajsek/zsh-bash-startup-files-loading-order-bashrc-zshrc-etc-e30045652f2e 。放到 .zshenv 里应该更合适一点。
我不知道 goland 是怎么运行的。不过我的 VPS 用 ssh remote env 的方式能够确定 .zshrc 没有被执行

2. 你可以尝试一下在 ~/.gnupg/gpg-agent.conf 里加上 cache 配置

default-cache-ttl 86400
max-cache-ttl 604800

然后运行一下 gpgconf --kill gpg-agent 关掉旧的 gpg-agent 。再到终端里随便签个名,这样 gpg-agent 里就有了 cache ,一段时间内不会再要输入密码。
zed1018
2023-10-17 19:23:06 +08:00
@LindsayZhou 方案 2 牛皮,我就是因为这个所以不想给自己添堵就没有给 gpg 加密码。

不过 OP 可以试试 gateway 里跑 wsl goland 能避免很多莫名其妙的问题,JB IDEs 的 wsl 支持总体上差 vscode 很多。
proxytoworld
2023-10-17 23:49:05 +08:00
@LindsayZhou
感谢#2 提供的方案 2 实测有效
使用了方案 1 后依然出错,不过是不一样的错
20:30:23.140: [glog] git -c credential.helper= -c core.quotepath=false -c log.showSignature=false commit -F /mnt/c/Users/user/AppData/Local/Temp/git-commit-msg-.txt --
方案 2 有效 也就不折腾方案 1 了
LindsayZhou
2023-10-18 13:49:48 +08:00
@proxytoworld #4 盲猜是 goland 去调用 git 的时候,没有给 tty
```
> ssh tei env | grep GPG
GPG_TTY=not a tty
```

cache 里放那么久可能需要注意一下安全性,我是用物理密钥,拔了就 cache 失效了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982651

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX