Golang Go语言中 Goland 在 WSL2 git commit 签名时报错
在使用 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
遇到过这个问题,很烦,成为我放弃 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>> ssh tei env | grep GPG<br>GPG_TTY=not a tty<br>
cache 里放那么久可能需要注意一下安全性,我是用物理密钥,拔了就 cache 失效了。
在 Golang 开发中,使用 GoLand 在 WSL2(Windows Subsystem for Linux 2)环境下进行 git commit 签名时遇到错误,通常可能涉及几个关键问题。以下是一些可能的解决步骤:
-
确认 GPG 配置: 确保在 WSL2 环境中已正确安装并配置了 GPG(GNU Privacy Guard)。你可以通过运行
gpg --list-keys
来检查是否有可用的密钥。如果没有,需要先生成或导入密钥。 -
设置 Git 使用 GPG: 配置 Git 使用 GPG 进行签名,可以通过运行
git config --global commit.gpgsign true
来启用。同时,确保git config --global user.signingkey
指向正确的 GPG 密钥 ID。 -
WSL2 与 Windows 间的兼容性问题: WSL2 和 Windows 之间的文件系统交互可能导致权限或路径问题。确保你的项目目录在 WSL2 中具有适当的读写权限,并且没有使用 Windows 特有的路径格式。
-
使用 WSL2 的终端: 直接在 WSL2 的终端(如 Ubuntu 或 Debian 的终端)中执行 Git 命令,而非通过 GoLand 的内置终端,有时可以解决路径或环境变量相关的问题。
-
查看错误日志: 详细查看 Git 提交时的错误输出,可能会提供具体的错误信息或缺失的配置项提示。
如果上述步骤仍无法解决问题,建议检查 GoLand 的配置或寻求更具体的错误信息来进一步诊断。