go get 无法从 github 上的私人仓库获取模块

go get can't get a module from a private repo on github

我有一个带有 Go 模块的(私有)github 仓库。我添加了标签 v0.1 并且 github 显示了该标签。我已经设置 go env -w GOPRIVATE=github.com/dwschulze/key-value-mod 并且我的 ~/.gitconfig 有 [url "git@github.com:"] insteadOf = https://github.com/

但是go get 无法检索我的模块:

$ go get github.com/dwschulze/key-value-mod
go: github.com/dwschulze/key-value-mod upgrade => v0.0.0-20210907155619-9116b97467d6
go get: github.com/dwschulze/key-value-mod@v0.0.0-20210907155619-9116b97467d6: parsing go.mod:
        module declares its path as: key-value-mod
                but was required as: github.com/dwschulze/key-value-mod

$ go get github.com/dwschulze/key-value-mod@v0.1
go get github.com/dwschulze/key-value-mod@v0.1: no matching versions for query "v0.1"

go get有什么问题?

v0.1go modules semver 不适合 go modules 消费。它包括 major 版本、minor 版本 - 但缺少 patch 编号:

注意:此处的 Pre-release Identifier 后缀 (-beta.2) 是可选的。

另请参阅 publishing go modules 文档:

Every required module in a go.mod has a semantic version, the minimum version of that dependency to use to build the module.

A semantic version has the form vMAJOR.MINOR.PATCH.

所以将您的标签更新为 v0.1.0 它应该可以工作。

根据错误,我认为您对私有存储库没有任何问题。相反,在我看来,您的 go.mod 文件将模块声明为

module key-value-mod

...

虽然应该

module github.com/dwschulze/key-value-mod

...

有两件事导致了这种情况。我必须清除我的模块缓存。第二个是 Simon 在上面提到的模块名称必须是将发布模块的 repo URL。

我不喜欢 go 模块与源代码存储库的紧密耦合,但这是现实。