【发布时间】:2020-04-05 20:38:42
【问题描述】:
我在将主要版本从 v1.x.x 升级到 v2.0.0 时遇到问题。
我创建了一个新的 git 标签v2.0.0 和一个新的子文件夹/v2/,将go.mod 文件放入其中并相应地更改了模块名称。
我的模块包含几个子包,现在我无法导入它们——即使是那些没有对它们进行更改的。
例如,我无法导入 /v2/mypkg/ - 我收到 module found but does not contain package 错误。如前所述,此文件夹仅包含 go.mod 文件。
我无法弄清楚 - 如果没有对 mypkg 进行任何更改 - 如果我希望制作另一个包的副本(?!),以便在 mypkg/ 和 @987654333 中都存在相同的代码@。
我尝试在常见的 Go 存储库中在线查找示例,看起来像:
- 所有使用 go-mod 的 repos 都低于 v2
- v2 以上的存储库与 go-mod 不是 100% 兼容
我可以通过使用+incompatible 导入我的包来解决它,然后创建一个 git 标签就足够了(无需创建/v2)。但是,如果我在没有严格要求 v2.0.0 的情况下导入包,默认情况下我会得到最新的 v1.x.x,这不是最新的,这对我来说是个问题。
我能做什么?
【问题讨论】:
-
您不必复制任何内容。只需将所有包移动到 v2 目录并更新导入。
-
至于“默认”包:没有这样的东西。您正在创建一个全新的模块。它的名称恰好与旧名称有一个共同的前缀。
-
这意味着如果有人开始一个新项目并且需要导入我的模块,他们需要显式导入
v2以获得最新版本,否则他们将获得最新的v1。恕我直言,这很奇怪 -
实际模块中不需要
/v2子目录,它只是一个名称,表示不同的导入路径。对于由于某种原因无法使用模块,或者您无法在 vcs 中标记或分支版本的用户,这是一种解决方法。例如github.com/hashicorp/hcl/v2包在repo中没有v2目录
标签: git go github versioning go-modules