通过不带SSL的HTTP将Go模块与私有存储库一起使用

时间:2019-07-08 15:46:00

标签: git http go go-modules

是否有一种方法可以强制go命令使用HTTP而不是HTTPS?

我正在尝试将项目移至Go Modules,但是该项目包括一个私有git存储库作为依赖项。 该git存储库托管在防火墙后面的专用LAN中,我通常 用类似cd $GOPATH/git.ourdomain.net/foo/bar/ && git clone http://my-user:my-password@git.ourdomain.net/foo/bar/reponame.git的东西克隆它。

但是现在命令go modgo getgo test试图将HTTP与SSL(HTTPS)结合使用。

此设置无济于事:

git config \
  --global \
  url."http://my-user:my-password@git.ourdomain.net/foo/bar/reponame".insteadOf \
  "http://git.ourdomain.net"

((在此处查看有关专用存储库https://medium.com/cloud-native-the-gathering/go-modules-with-private-git-repositories-dfe795068db4git设置的一些背景信息)

我已经修改了文件go.mod,以包括对该私有存储库的引用(使用类似git.ourdomain.net/foo/bar/reponame@v0.0.0-<YYYYMMDDHHmmSS>-<GIT_COMMIT_ID>的模式),但是在调用go test和文件go.mod时包括那个私人仓库,那么我会看到:

go: git.ourdomain.net/foo/bar/reponame@v0.0.0-<YYYYMMDDHHmmSS>-<GIT_COMMIT_ID>: unrecognized import path "git.ourdomain.net/foo/bar/reponame" (https fetch: Get https://git.ourdomain.net/foo/bar/reponame?go-get=1: dial tcp <PUBLIC_IP_ADDRESS>:443: connect: connection refused)

我还尝试将go.mod还原为原始版本(没有该私有存储库),并尝试从文件go get的存储路径恢复到go.mod,假设这样做会由于go.mod(请在此处https://golang.org/cmd/go/#hdr-Module_aware_go_get)通过某种方式通过HTTP更新-insecure文件,如下所示:

GO111MODULE=on go get -insecure -u git.ourdomain.net/foo/bar/reponame

但这给出了错误消息:

fatal: remote error: Repository not found
The requested repository does not exist, or you do not have permission to
access it.

我知道我应该使用SSL,但是我从未在此git服务器上控制过以应配置方式进行配置。因此,我只是使用git clone提供一个HTTP URL(在防火墙后面时),它始终有效。

1 个答案:

答案 0 :(得分:0)

go命令通过将给定模块路径解析为版本控制位置来开始获取该路径。为了解析路径,它发出HTTPS请求并按照https://tip.golang.org/cmd/go/#hdr-Remote_import_paths中的描述寻找<meta name="go-import" […]>标签。

如果您希望它跳过这一步,则必须使用版本控制后缀(在同一文档中列出)来指示导入路径是原始版本控制路径。

如果您写的是import "git.ourdomain.net/foo/bar/reponame.git"而不是import "git.ourdomain.net/foo/bar/reponame",应该会发现初始HTTPS解析已被跳过,随后的git操作使用了全局{ {1}}配置。