Golang:多个模块的单独版本控制

agr*_*kiy 4 semantic-versioning go-modules

想象一下,我有一个存储库github.com/user/golang-examples,并且我准备分别对其中的每个示例模块进行版本控制:

\n
guthub.com/user/golang-examples\n  /modA\n    /go.mod\n    /pkgA1\n    /pkgA2\n\n  /modB\n    /go.mod\n    /pkgB1\n    /pkgB2\n
Run Code Online (Sandbox Code Playgroud)\n

(我知道习惯用法是 \xe2\x80\x9cone repo - one module\xe2\x80\x9d 但多模块项目也有用例,所以这不是讨论的主题)

\n

同时,语义 git 标记(v1.0.0等)发生在repov2.0.0级别,而不是其子文件夹级别。例如,这使得无法单独标记模块

\n
    \n
  1. 首先, 开发被主要版本modA赶超,标签被推送到repo级别,目的是版本化modBv2.0.0modA
  2. \n
  3. 稍后,当想要升级modB到 v2 时,可以\xe2\x80\x99tv2.0.0第二次推送相同的 git 标签到 version modB
  4. \n
\n

如何按照 golang\xe2\x80\x99s 版本控制范式完成此任务?同样,这是关于多模块项目。将模块拆分为存储库的明显解决方案在这里有点不利,因为需要顶级存储库的总体 \xe2\x80\x9cexamples\xe2\x80\x9d 语义。

\n

谢谢!

\n

agr*_*kiy 6

好的,经过继续搜索,我找到了这个资源: https: //github.com/go-modules-by-example/index/blob/master/009_submodules/README.md

适用于我的情况,答案是使用:

  • 对于模块modA使用表单的标签modA/vX.Y.Z(使用语义版本控制)
  • 对于模块modB使用以下形式的标签modB/vX.Y.Z

对于上下文,来自上面 lint 的引用:

官方模块提案预测,大多数项目将遵循最简单的方法,即每个存储库使用单个 Go 模块,这通常意味着在存储库的根目录中创建一个 go.mod 文件。

由于某种原因,我仍然找不到正确的文档/规格参考。