问题描述
想象一下,我有一个仓库github.com/user/golang-examples
,我准备对其中的每个示例模块分别进行版本控制:
guthub.com/user/golang-examples
/modA
/go.mod
/pkgA1
/pkgA2
/modB
/go.mod
/pkgB1
/pkgB2
(我知道惯用语是“一个仓库-一个模块”,但是多模块项目也有用例,因此这不是讨论的主题)
同时,语义git标签(v1.0.0
,v2.0.0
等)在 repo 级别上发生,而不是在子文件夹级别上。这样就不可能单独标记模块,例如
- 首先,
modA
在开发中被主要版本取代了modB
,并且标签v2.0.0
被推送到了回购级别,目的是版本modA
- 后来,当人们想要将
modB
升级到v2时,就无法第二次将相同的v2.0.0
git标签推入版本modB
。
如何按照golang的版本控制范式完成此任务?同样,这是关于多模块项目的。将模块拆分为存储库的明显解决方案在这里是不利的,因为需要顶层存储库的总体“示例”语义。
谢谢!
解决方法
好吧,在继续搜索后,我找到了以下资源:https://github.com/go-modules-by-example/index/blob/master/009_submodules/README.md
根据我的情况,答案是使用:
- 对于模块
modA
,使用modA/vX.Y.Z
形式的标签(使用语义版本控制) - 对于模块
modB
,使用格式为modB/vX.Y.Z
的标签
在上下文中,来自上面的皮棉的引用:
official modules proposal预测大多数项目将采用最简单的方法,即每个存储库使用单个Go模块,这通常意味着在存储库的根目录中创建一个go.mod文件。
由于某些原因,我仍然找不到正确的文档/规格参考。