go - 将存储库升级到 v2

标签 go versioning

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

根据“go 命令”文档:

To preserve import compatibility, the go command requires that modules with major version v2 or later use a module path with that major version as the final element. For example, version v2.0.0 of example.com/m must instead use module path example.com/m/v2, and packages in that module would use that path as their import path prefix, as in example.com/m/v2/sub/pkg. Including the major version number in the module path and import paths in this way is called "semantic import versioning".

Source

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

最佳答案

关于如何移动到版本 2 有两个选项:分支和子目录。您可以在 https://research.swtch.com/vgo-module 阅读更多关于它们的信息(带有更好的插图) .

这两个选项使一个版本可以依赖另一个版本。例如,当您实现版本 2 时,您可以更新版本 1 以依赖于版本 2(但保持相同的 v1 API)。然后,您只需要为您的库实现一种逻辑。根据项目类型、您要提供的支持以及所需的修复,这可能适合您也可能不适合您。

分支机构

master: A -> B (v1.0.0) -> D (v1.0.1)
                         \
v2:                       -> C (v2.0.0)

在这种情况下:

  1. 您在 master 分支上开始您的项目,
  2. 进行一些提交(AB),
  3. 标记v1.0.0
  4. 您决定进行重大更改。因此,您创建了一个新分支 (git checkout -b v2) 并进行了重大更改。您的 go.mod 现在必须更新,以便模块名称以 /v2 结尾(它本质上是一个新模块!)。
  5. 您决定修复 v1 中的错误,因此您返回该分支,进行新的提交,并标记一个新的 v1 版本。

当用户需要您的模块的特定版本时,go 将在两个分支中查找哪个分支提供了正确的模块。

子目录

不想在分支上开发怎么办?您可以为每个主要版本创建一个子目录。版本 1 位于顶层,然后新版本移至子目录:

go.mod (module example.com/foo)
foo.go
v2/
  go.mod (module example.com/foo/v2)
  foo.go

当您使用新版本标记此 repo 时,v1 将使用顶级版本。 v2 标签将使用 v2 子目录。

关于go - 将存储库升级到 v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344471/

相关文章:

.net - Azure 中如何处理 .net 框架的更新?

git - 正确使用git

svn - 文件级别的 CDN 版本控制

regex - 在golang中用零替换数字

Go:所有 goroutines 都在 sleep - 死锁

json - Go Unmarshal JSON,但将嵌套结构解码为字符串

go - 如何在 Golang 中生成给定私钥和证书的 PKCSs#12 文件?

xcode - 我在哪里更改 xcode >= 12.3 中的版本和内部版本号

svn - 如何在文件中显示最新版本?

go - 如何使用 Golang 删除目录的所有内容?