我正在使用golang 1.13。
我有一个依赖于私人gitlab项目的项目。
我有相同的ssh键。
当我尝试为新创建的模块检索依赖项时,出现以下错误:
$ go version
go version go1.13 linux/amd64
$ go mod why
go: downloading gitlab.com/mycompany/myproject v0.0.145
verifying gitlab.com/mycompany/myproject@v0.0.145: gitlab.com/mycompany/myproject@v0.0.145: reading https://sum.golang.org/lookup/gitlab.com/mycompany/myproject@v0.0.145: 410 Gone
我不知道为什么要尝试对sum.golang.org/lookup进行ping操作,因为它是一个私有gitlab项目。
我的〜/ .gitconfig包含以下内容(基于我在google搜索中查找的类似错误)
# Enforce SSH
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
insteadOf = https://bitbucket.org/
[url "git@gitlab.com:"]
insteadOf = https://gitlab.com/
错误仍然存在。
我希望将软件包从我的私人gitlab项目存储库下载到当前项目。
我是否需要在我的私人gitlab项目存储库中做任何事情以使其准备好“开始使用”?
私有gitlab项目存储库已经包含该项目的go.sum和go.mod。
我想念什么吗?
edit:1)私人存储库名称和公司名称不包含星号或任何其他特殊字符。只有字母,甚至没有数字字符。
答案 0 :(得分:21)
抬起头来回答我自己的问题,
设置GOPRIVATE变量似乎有帮助。
GOPRIVATE=gitlab.com/mycompany/* go mod why
” 新的GOPRIVATE环境变量指示不公开可用的模块路径。它用作较低级别的GONOPROXY和GONOSUMDB变量的默认值,它们对通过代理获取并使用校验和数据库进行验证的模块提供了更细粒度的控制。 来自https://golang.org/doc/go1.13
升:
设置环境变量GONOSUMDB似乎也可以。 具体来说,调用以下命令似乎有帮助。
GONOSUMDB=gitlab.com/mycompany/* go mod why
上面的env变量阻止ping到sum.golang.org/lookup以进行校验和匹配。它还可以防止将私有存储库的名称泄露给公共校验和数据库。 [来源-https://docs.gomods.io/configuration/sumdb/]
也-在这里
* GONOSUMDB=prefix1,prefix2,prefix3 sets a list of module path prefixes, again possibly containing globs, that should not be looked up using the database.
来源:https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md
相关问题:
答案 1 :(得分:5)
基本上,它无法验证私有存储库。但是,我不喜欢关闭校验和,但是您可以在尝试获取模块之前轻松地将GOSUMDB
设置为off
。像这样的东西:
GOSUMDB=off go get github.com/mycompany/myproject
ref:https://github.com/golang/go/issues/35164#issuecomment-546503518
第二种更好的解决方案是设置GOPRIVATE
环境变量,该环境变量控制go命令认为哪些模块是私有的(不可公开使用),因此不应使用代理或校验和数据库。变量是逗号分隔的模块路径前缀的glob模式列表(Go的path.Match
的相同语法)。例如,
export GOPRIVATE=*.corp.example.com,rsc.io/private
或
go env -w GOPRIVATE=github.com/mycompany/*
您可以尝试的最后一个解决方案是关闭所有您不想公开或通过sum.golang.org/lookup/github.com/mycompany/...
进行验证的私有存储库的检查。
GONOSUMDB=gitlab.com/mycompany/* go mod why
请注意:
如果在通过https获取模块或存储库时遇到问题,则可能需要将以下内容添加到~/.gitconfig
中,以使go
使用ssh
而不是{{1 }}
[URL“ ssh://git@github.com/”] 代替Of = https://github.com/
答案 2 :(得分:0)
您是否会偶然在您的私人仓库中有一个文件名带有星号的文件?
答案 3 :(得分:0)
我也有这种情况,这对我有用。
[url "ssh://youprivate.com"]
insteadOf = https://yourprivate.com
然后一切都会好的。
答案 4 :(得分:-1)
更改以下go变量的设置,然后升级您的软件包,
$ export GO111MODULE=on
$ export GOPROXY=direct
$ export GOSUMDB=off
$ go get -u <your dependency package>