猿问

将存储库升级到 v2

此时我正在为多个存储库使用 Go 1.11 模块。现在我正在处理一个已经是 1.x 版本的。结合移动到 go 模块,我做了一些其他重大更改,所以很明显是时候增加存储库的主要版本了。这意味着转到版本 2。

根据“go command”文档:

为了保持导入兼容性,go 命令要求具有主要版本 v2 或更高版本的模块使用以该主要版本作为最终元素的模块路径。例如,example.com/m 的 v2.0.0 版本必须使用模块路径 example.com/m/v2,并且该模块中的包将使用该路径作为其导入路径前缀,如 example.com/m/v2 /子/包。以这种方式在模块路径和导入路径中包含主版本号称为“语义导入版本控制”。

来源

这就像更新我的文件的第一行一样简单go.mod,附加/v2到模块名称吗?或者我应该v2/在我的存储库中创建一个目录并将所有文件移动到那里吗?


慕仙森
浏览 111回答 2
2回答

肥皂起泡泡

如何移动到版本 2 有两个选项:分支和子目录。这两个选项使一个版本可以依赖另一个版本。例如,当您实施版本 2 时,您可以更新版本 1 以依赖于版本 2(但保持相同的 v1 API)。然后,您只需要为您的库实现一种逻辑。根据项目类型、您要提供的支持以及它需要的修复,这可能适合您也可能不适合您。分支机构master: A -> B (v1.0.0) -> D (v1.0.1)                          \ v2:                       -> C (v2.0.0)在这种情况下:你在分支上开始你的项目master,做一些提交(A和B),标签v1.0.0。您决定进行重大更改。因此,您创建了一个新分支 ( git checkout -b v2) 并进行了重大更改。您的 go.mod 现在必须更新,以便模块名称以/v2(它本质上是一个新模块!)结尾。您决定修复 中的错误v1,因此您返回该分支,进行新提交并标记新v1版本。当用户需要您的模块的特定版本时,go将在两个分支中查找哪个提供了正确的模块。子目录不想在分支上开发怎么办?您可以为每个主要版本创建一个子目录。版本 1 位于顶层,然后新版本移至子目录:go.mod (module example.com/foo)foo.gov2/  go.mod (module example.com/foo/v2)  foo.go当您使用新版本标记此 repo 时,v1将使用顶级版本。v2标签将使用v2子目录。

ITMISS

来自模块 wiki 的发布模块(v2 或更高版本)部分:有两种可供选择的机制来发布 v2 或更高版本的模块。请注意,使用这两种技术,当模块作者推送新标签时,新模块版本可供消费者使用。使用创建发布的示例v3.0.0,两个选项是:主要分支:更新文件以在指令中的模块路径末尾go.mod包含一个(例如,)。更新模块中的 import 语句以也使用(eg, )。用 标记发布。/v3modulemodule github.com/my/module/v3/v3import "github.com/my/module/v3/mypkg"v3.0.0Go 版本 1.9.7+、1.10.3+ 和 1.11+ 能够正确使用和构建使用这种方法创建的 v2+ 模块,而无需更新尚未选择加入模块的消费者代码(如“语义导入版本控制” 部分)。注意:不需要创建新分支。例如,如果您之前已经在 master 上发布,并且更愿意在 master 上标记 v3.0.0,这也是一个可行的选择。[...][...]主要子目录:创建一个新的v3子目录(例如,my/module/v3)并go.mod在该子目录中放置一个新文件。模块路径必须以/v3. 将代码复制或移动到 v3子目录中。更新模块中的 import 语句以也使用/v3(eg, import "github.com/my/module/v3/mypkg")。用 标记发布v3.0.0。但是,该部分中还有其他值得回顾的详细信息。
随时随地看视频慕课网APP

相关分类

Go
我要回答