繁体   English   中英

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

[英]go get using ssh instead of https (NOT on github)

我们有一个只能通过 ssh/git(无 https)访问的私有代码存储库,我们希望在那里托管我们的 go 代码/模块。

首先我试过:

git config --global url."git@code.internal.local:".insteadOf "https://code.internal.local/"

所以,以下两个工作都很好:

  • 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

问题

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

为了解决这个问题, go get使用了一组 HTTPS(和 HTTP,作为回退,必须明确启用)GET 请求到一组由指定的导入路径构造的特殊 URL。 假设服务于此类调用的任何内容都能够以识别要使用的 VCS 和存储库 URL 的回复进行响应。

可能的解决方案

如果您正在使用模块,您可以在您的团队方便的任何地方设置一个专用的“模块代理”(也可能部署了许多代理),并使团队成员使用指向方便实例的GOPROXY环境变量。 有关更多信息,请参阅go help modules

否则,如果您可以放置​​一个网络服务器来回答远程导入路径解析请求,您就可以这样做; nginx 和 apache 可以用于它们的库存模块。

否则,您可能需要求助于手动操作。

我检查了我的.gitconfig并找到了这个(对于github私有仓库)-

[url "ssh://git@github.com/"]
        insteadOf = https://github.com/

以上配置对我有用。 您也可以尝试在项目根目录中创建.netrc文件,但不应其推送到远程代码存储库。

我在这里发布了详细答案https://stackoverflow.com/a/65925691/348719

基本上,你应该添加.git后缀为require在客户机和module的服务器。 如果没有.git后缀, go get将使用 https。

  • 在客户端(go.mod)(将版本号更改为更正):
require code.internal.local/reponame.git v0.1.0

最好添加go env -w GOPRIVATE=code.internal.local

  • 在服务器(go.mod)
module code.internal.local/reponame.git

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM