She*_*eeb 16 git go go-modules
我们有一个只能通过 ssh/git (无 https)访问的私有代码存储库,并且我们希望在那里托管我们的 go 代码/模块。
首先我尝试:
git config --global url."git@code.internal.local:".insteadOf "https://code.internal.local/"
Run Code Online (Sandbox Code Playgroud)
因此,以下两项都可以正常工作:
git clone git@code.internal.local:reponame.git
git clone https://code.internal.local/reponame
但go get code.internal.local/reponame
失败了,因为 go 仍然坚持尝试 https://...而不是 git。
package code.internal.local/reponame: unrecognized import path "code.internal.local/reponame": https fetch: Get "https://code.internal.local/reponame?go-get=1": dial tcp 192.168.0.5:443: i/o timeout
Run Code Online (Sandbox Code Playgroud)
Sau*_*ngh 11
我检查了我的.gitconfig并发现了这个(对于github私人仓库) -
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
Run Code Online (Sandbox Code Playgroud)
上面的配置对我有用。您也可以尝试在项目根目录中创建.netrc文件,但不应将其推送到远程代码存储库。
您观察到的行为在文档的“远程导入路径”go get
部分中有详细说明。特别是,仅通过查看远程导入路径code.internal.local/reponame
,go get
无法知道哪个 VCS 以及哪个 URL 特别用于实际托管该包。
为了解决这个问题,go get
可以使用一组 HTTPS(以及 HTTP,作为后备,必须显式启用)GET 请求,发送到一组由指定导入路径构造的特殊 URL。假设无论服务于此类调用,都能够通过回复来响应,该回复标识要使用的 VCS 和存储库的 URL。
如果您使用模块,您可以在您的团队方便的地方设置专用的“模块代理”(此外,可能部署许多代理),并让团队成员使用GOPROXY
指向方便实例的环境变量。请参阅go help modules
获取更多信息。
否则,如果您可以放置一个网络服务器来响应远程导入路径解析请求,您就可以做到;nginx 和 apache 可以通过它们的库存模块来实现这一点。
否则,您可能需要诉诸手动操作。