如何管理子模块的版本?

Ric*_*ess 2 go hashicorp-vault

如果 Go 存储库go.mod在其根目录中有一个文件,但在子文件夹中也有一个文件,那么子模块的版本是如何发布的?

举例来说,我的团队一直在我们内部 cli 工具上使用 vault。我们最终使用了:

github.com/hashicorp/vault/api <-- 有一个 go.mod

github.com/hashicorp/vault/commands <-- 没有 go.mod 所以继承自 github.com/hashicorp/vault

我正在尝试将 vault/api 更新到最新版本 1.3.3:

github.com/hashicorp/vault v1.3.3
github.com/hashicorp/vault/api v1.3.3
Run Code Online (Sandbox Code Playgroud)

问题是我得到:

go: github.com/hashicorp/vault/api@v1.3.3: reading github.com/hashicorp/vault/api/api/go.mod at revision api/v1.3.3: unknown revision api/v1.3.3

我认为这是由这个根模块和冲突引起的。

Eli*_*sky 5

子模块的版本不一定与父模块的版本同步。它们应该被视为完全独立的模块,它们恰好位于相同的存储库/目录结构中。

查看https://github.com/hashicorp/vault/releases以获取官方发布/标签——Go 支持分层 Git 标签来标记子模块的版本。例如,虽然截至今​​天,vault其自身的最新版本是 1.3.3,但我只vault/api在 v1.0.4 中找到(这是带有 的最新标记api/v1.0.4

只需执行 ago get即可获取其最新版本。最初导入时,您实际上不必在 go.mod 中指定版本 - 该go工具会为您找到最新版本。