【问题标题】:go get can't get a module from a private repo on githubgo get 无法从 github 上的私有仓库获取模块
【发布时间】:2021-09-08 04:11:39
【问题描述】:

我有一个带有 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 有什么问题?

【问题讨论】:

  • go get github.com/dwschulze/key-value-mod@latest 做这个工作
  • @whitespace - 不。它给出了go: github.com/dwschulze/key-value-mod latest => v0.0.0-20210907155619-9116b97467d6。同上。
  • 你确定你发布了你的git tag吗?您可以在本地标记发布 - 但它可能不会被推送到远程仓库。标签发布是否出现在 github 门户网站上?如果没有:git push --tags
  • 是的,标签已发布。我还发布了另一个标签 0.1,以防万一“v”出现问题,但它做同样的事情。我认为go get 刚刚坏掉了。

标签: go tags go-modules go-get


【解决方案1】:

基于错误,我认为您对私人回购没有任何问题。相反,在我看来,您的 go.mod 文件将模块声明为

module key-value-mod

...

应该是的

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

...

【讨论】:

【解决方案2】:

v0.1 中的 go modules semvergo modules 消费不正确。它包括一个major 版本、minor 版本-但缺少patch 编号:

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

另见publishing go modules docs:

go.mod 中的每个必需模块都有一个语义版本,最低 用于构建模块的依赖项的版本。

语义版本的格式为 vMAJOR.MINOR.PATCH。

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

【讨论】:

  • 我添加了一个 v0.1.0 标签,也遇到了同样的问题。
【解决方案3】:

造成这种情况的原因有两个。我不得不清除我的模块缓存。第二个是 Simon 上面提到的模块名称必须是模块将发布的 repo URL。

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

【讨论】:

  • 除此之外,semver 格式仍然是必需的。虽然您可以go get <pkg>@v0.1(没有补丁号),但远程 git 标记必须具有 3 位数 (vMajor.Minor.Patch) 格式才能工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2021-10-29
  • 2022-01-01
  • 2018-10-20
  • 2020-08-20
  • 2012-10-19
  • 2017-02-11
相关资源
最近更新 更多