私人回购 - 去 1.13 - `go mod ..` 失败:ping “sum.golang.org/lookup” .. 验证包 .. 410 不见了
Posted
技术标签:
【中文标题】私人回购 - 去 1.13 - `go mod ..` 失败:ping “sum.golang.org/lookup” .. 验证包 .. 410 不见了【英文标题】:private repo - go 1.13 - `go mod ..` failed: ping "sum.golang.org/lookup" .. verifying package .. 410 gone 【发布时间】:2020-01-13 02:32:28 【问题描述】:我正在使用 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
我不知道它为什么要尝试 ping sum.golang.org/lookup,因为它是一个私人 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 项目存储库中做些什么来让它为“go get”做好准备吗?
私有 gitlab 项目存储库也已经包含该项目的 go.sum 和 go.mod。
我错过了什么?
edit: 1) 私有仓库名称和公司名称不包含星号或任何其他特殊字符。只有字母,甚至没有数字字符。
【问题讨论】:
你会不会碰巧在你的私人仓库中有一个文件名中带有星号的文件? 嗯,不。只有字母字符,甚至没有数字。 【参考方案1】:查找后回答我自己的问题,
设置 GOPRIVATE 变量似乎有帮助。
GOPRIVATE=gitlab.com/mycompany/* go mod why
" 新的 GOPRIVATE 环境变量指示不公开可用的模块路径。它用作较低级别的 GONOPROXY 和 GONOSUMDB 变量的默认值,这些变量提供了对通过代理获取哪些模块并使用校验和数据库进行验证的更细粒度的控制。 " 来自https://golang.org/doc/go1.13
Aliter:
设置环境变量 GONOSUMDB 似乎也有效。 具体来说,调用以下命令似乎会有所帮助。
GONOSUMDB=gitlab.com/mycompany/* go mod why
上面的 env 变量阻止了对 sum.golang.org/lookup 的 ping 校验和匹配。它还可以防止将私有存储库的名称泄漏到公共校验和数据库。 [来源-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
相关问题:
https://github.com/golang/go/issues/32291 https://github.com/golang/go/issues/33985 [“Go 1.13 已经发布,这个问题是在冻结窗口之后提交的。提议的更改不会在 1.13 中发生,但也不要假设它们一定会在 1.14 中发生。”来自上述问题 33985。 ]【讨论】:
【参考方案2】:基本上它无法验证私有存储库。但是我不喜欢关闭校验和,但是您可以在尝试获取模块之前轻松地将GOSUMDB
设置为off
。像这样:
GOSUMDB=off go get github.com/mycompany/myproject
参考: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
以使用 ssh
而不是 https
生成 go
获取/获取存储库
[url“ssh://git@github.com/”] 而不是 = https://github.com/
【讨论】:
【参考方案3】:改变 go 变量的设置,然后升级你的包,
$ export GO111MODULE=on
$ export GOPROXY=direct
$ export GOSUMDB=off
$ go get -u <your dependency package>
【讨论】:
【参考方案4】:我也有这种情况,这对我有用。
-
编辑您的 .git/config 并在其中添加两行。(我在主目录的全局 .gitconfig 中有这个)
[url "ssh://youprivate.com"]
insteadOf = https://yourprivate.com
-
导出 GOSUMDB=off
然后一切都会好的。
【讨论】:
以上是关于私人回购 - 去 1.13 - `go mod ..` 失败:ping “sum.golang.org/lookup” .. 验证包 .. 410 不见了的主要内容,如果未能解决你的问题,请参考以下文章
GitHub Actions - 将公共回购克隆到我的私人回购?