有没有办法强制go
命令使用 HTTP 而不是 HTTPS?
我正在尝试将一个项目移动到 Go Modules,但是这个项目包含一个私有(private)的 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"
(在此处查看有关 git
私有(private)存储库设置的一些上下文:https://medium.com/cloud-native-the-gathering/go-modules-with-private-git-repositories-dfe795068db4)
我已经修改了文件 go.mod
包含对该私有(private)存储库的引用(使用类似 git.ourdomain.net/foo/bar/reponame@v0.0.0-<YYYYMMDDHHmmSS>-<GIT_COMMIT_ID>
的模式),但是在调用 go test
时带有一个文件 go.mod
包括那个私有(private) repo ,然后我看到:
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
到原始版本(没有那个私有(private)存储库)并尝试 go get
从文件所在的路径 go.mod
被存储,假设会以某种方式更新 go.mod
由于 -insecure
,通过 HTTP 文件(在这里查看 https://golang.org/cmd/go/#hdr-Module_aware_go_get ),像这样:
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(在防火墙后面时)并且它始终有效。
最佳答案
go
命令通过将该路径解析为版本控制位置来开始获取给定的模块路径。为了解析路径,它发出 HTTPS 请求并查找 <meta name="go-import" […]>
标记如 https://tip.golang.org/cmd/go/#hdr-Remote_import_paths 中所述.
如果您希望它跳过该步骤,则必须使用版本控制后缀(在同一文档中列出)来指示导入路径是原始版本控制路径。
如果你写import "git.ourdomain.net/foo/bar/reponame.git"
而不是 import "git.ourdomain.net/foo/bar/reponame"
,您应该会发现初始 HTTPS 解析被跳过,随后的 git
操作使用 insteadOf
来自全局的声明 git
配置。
关于git - 通过不带 SSL 的 HTTP 将 Go 模块与私有(private)存储库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56938451/