Golang Go语言中 Goland 在 WSL2 git commit 签名时报错

发布于 1周前 作者 nodeper 来自 Go语言

在使用 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 时能够正常弹出


Golang Go语言中 Goland 在 WSL2 git commit 签名时报错

更多关于Golang Go语言中 Goland 在 WSL2 git commit 签名时报错的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

遇到过这个问题,很烦,成为我放弃 wsl 的原因之一

更多关于Golang Go语言中 Goland 在 WSL2 git commit 签名时报错的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我不用 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 ,一段时间内不会再要输入密码。

方案 2 牛皮,我就是因为这个所以不想给自己添堵就没有给 gpg 加密码。

不过 OP 可以试试 gateway 里跑 wsl goland 能避免很多莫名其妙的问题,JB IDEs 的 wsl 支持总体上差 vscode 很多。


感谢#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 了

#4 盲猜是 goland 去调用 git 的时候,没有给 tty
<br>&gt; ssh tei env | grep GPG<br>GPG_TTY=not a tty<br>

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

在 Golang 开发中,使用 GoLand 在 WSL2(Windows Subsystem for Linux 2)环境下进行 git commit 签名时遇到错误,通常可能涉及几个关键问题。以下是一些可能的解决步骤:

  1. 确认 GPG 配置: 确保在 WSL2 环境中已正确安装并配置了 GPG(GNU Privacy Guard)。你可以通过运行 gpg --list-keys 来检查是否有可用的密钥。如果没有,需要先生成或导入密钥。

  2. 设置 Git 使用 GPG: 配置 Git 使用 GPG 进行签名,可以通过运行 git config --global commit.gpgsign true 来启用。同时,确保 git config --global user.signingkey 指向正确的 GPG 密钥 ID。

  3. WSL2 与 Windows 间的兼容性问题: WSL2 和 Windows 之间的文件系统交互可能导致权限或路径问题。确保你的项目目录在 WSL2 中具有适当的读写权限,并且没有使用 Windows 特有的路径格式。

  4. 使用 WSL2 的终端: 直接在 WSL2 的终端(如 Ubuntu 或 Debian 的终端)中执行 Git 命令,而非通过 GoLand 的内置终端,有时可以解决路径或环境变量相关的问题。

  5. 查看错误日志: 详细查看 Git 提交时的错误输出,可能会提供具体的错误信息或缺失的配置项提示。

如果上述步骤仍无法解决问题,建议检查 GoLand 的配置或寻求更具体的错误信息来进一步诊断。

回到顶部