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 时输入账密登录。

只使用 http 不安全还麻烦,所以不推荐。

如果 gitlab 有 https 的话就不需要配置 GOINSECURE 。

使用命令:

git config --global url."git@<GITLAB_HOST>:".insteadOf "https://GITLAB_HOST/"

注意

1、2步配置完成后应该就能使用 git 访问到仓库了,可以用命令测试。

git ls-remote ssh://<GITLAB_HOST>/<REPOSITORY>

成功会输出仓库的所有 tag/branch 信息。

3. 设置 go env

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

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

设置 GOINSECURE 的目的是让 go 用 http 而不是 https 协议去拉代码。有 https 访问的情况下不用配。

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

4. 拉代码

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

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

总结

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

/golang/ /git/