现象
内网搭建的 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
这一步的目的是让配置 GOPRIVATE
、GOINSECURE
之后 go 走 http 协议下的时候替换成 ssh 协议。
直接用 http 也可以但是需要在 go mod download
时输入账密登录。
只使用 http 不安全还麻烦,所以不推荐。
如果 gitlab 有 https 的话就不需要配置 GOINSECURE 。
使用命令:
git config --global url."git@<GITLAB_HOST>:".insteadOf "https://GITLAB_HOST/"
注意
<GITLAB_HOST>:
后面的:
别漏了,这样才能拼出git@github.com:nnnew/battery
这样的合法地址。"https://<GITLAB_HOST>"
如果是 http 协议,就改成http://
开头,别写错。
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 屁事多。