是否有一种方法可以强制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 mod
,go get
和go 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-dfe795068db4的git
设置的一些背景信息)
我已经修改了文件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(在防火墙后面时),它始终有效。
答案 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}}配置。