使用 ssh 而不是 https(不在 github 上)

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文件,但不应将其推送到远程代码存储库。

  • 谢谢,但正如标题中提到的:这不在 github 上。这不是一个解决方案。 (2认同)

kos*_*tix 3

问题

您观察到的行为在文档的“远程导入路径”go get部分中有详细说明。特别是,仅通过查看远程导入路径code.internal.local/reponamego get无法知道哪个 VCS 以及哪个 URL 特别用于实际托管该包。

为了解决这个问题,go get可以使用一组 HTTPS(以及 HTTP,作为后备,必须显式启用)GET 请求,发送到一组由指定导入路径构造的特殊 URL。假设无论服务于此类调用,都能够通过回复来响应,该回复标识要使用的 VCS 和存储库的 URL。

可能的解决方案

如果您使用模块,您可以在您的团队方便的地方设置专用的“模块代理”(此外,可能部署许多代理),并让团队成员使用GOPROXY指向方便实例的环境变量。请参阅go help modules获取更多信息。

否则,如果您可以放置​​一个网络服务器来响应远程导入路径解析请求,您就可以做到;nginx 和 apache 可以通过它们的库存模块来实现这一点。

否则,您可能需要诉诸手动操作。