Windows下go拉取http模块

作于: 2023 年 3 月 21 日,预计阅读时间 3 分钟

现象

内网搭建的 gitlab 没有开启 https,只有 http 服务。允许通过 8022 端口 SSH 协议 clone 或者 80 HTTP 协议。

但是 go 默认不支持(不然就没现在这么多壁画了)。

方法

1. 编辑 ~/.ssh/config

gvim ~/.ssh/config 打开 ssh 配置,添加一个 gitlab 的 ssh 配置。

Host <gitlab的ip>
    HostName <gitlab的ip>
    Port <gitlab的ssh端口>
    User git
    IdentityFile <你的ssh私钥路径>

这一步的目的是万一你的端口不是22的话,后续git配置还能读ssh配置选择正确的端口。

2. 编辑 ~/.gitconfig

这一步的目的是让配置 GOPRIVATEGOINSECURE 之后 go 走 http 协议下的时候替换成 ssh 协议。

直接用 http 也可以但是需要在 go mod download 时输入账密登录。我的 windows git 客户端会报 terminal prompts disabled (vscode+remote linux就没事,但windows下各种毛病),所以配成 ssh 之后就免密了,Windows 下少一点麻烦。

[url "git@<gitlab的ip>:"]
    insteadOf = http://<gitlab的ip>/

注意 url=后面的:别漏了,这样才能拼出 git@github.com:nnnew/battery 这样的合法地址。

3. 设置 go env

go env -w GOPRIVATE="<gitlab的ip>"
go env -w GOINSECURE="<gitlab的ip>"

设置 GOPRIVATE 的目的是让 go 从私有 git 仓库拉代码。

设置 GOINSECURE 的目的是让 go 用 http 而不是 https 协议去拉代码。

理论上来说,也可以不设置 GOINSECURE,但是 ~/.gitconfig 里配置 insteadOf 的时候要注意写 https 而不是 http,可以自己试试。

4. 拉代码

试试 git clone 一个私有仓库(http),如果没提示输入账密就成功那就ok了。要是不行就自己搜索下。

理论上来说接下来 go mod download 就不会有问题了。

总结

重新配了一遍发现还是 Windows 屁事多。

/golang/ /git/