git - Go 模块在 go.mod 中用 v0.0.0-<timestamp>-<revision> 替换显式版本

标签 git go gitlab versioning go-modules

我最近在我的 Go 项目中添加了一个功能,它可能会破坏使用它的其他项目。我决定通过添加一个匹配的 git 标签 2.0.0 来为这个项目添加一个主要版本“A”。 (以前是 1.x.x )。
在我的另一个需要它的项目“B”中,我更新了它的 go.mod像这样的文件:

module gitlab.mydomain.com/namespace/B

go 1.12

require (
    gitlab.mydomain.com/namespace/A v2.0.0
)

可以看到,我特别提到了v2.0.0 ,但是一旦我运行 B,A 的版本就会被 v0.0.0-<timestamp>-<revision> 覆盖.

我确保标签存在于 Remote 中。

我在这里想念什么?

最佳答案

从主要版本开始 2 (v2 及以后),您必须修改导入路径,您必须将主要版本添加为导入路径的后缀。您必须将包导入为:

import "gitlab.mydomain.com/namespace/A/v2"

这也必须出现在go.mod像:
require gitlab.mydomain.com/namespace/A/v2 v2.0.0

由于主要版本代表 Semver 中的不兼容更改,因此它们的导入路径也必须不同(相同的导入路径表示相同的依赖项)。这是import compatibility rule :

If an old package and a new package have the same import path,
the new package must be backwards compatible with the old package.



Go Modules Wiki: Why must major version numbers appear in import paths? 中了解更多信息

并且也在博客文章中:The Go Blog: Go Modules: v2 and Beyond

关于git - Go 模块在 go.mod 中用 v0.0.0-<timestamp>-<revision> 替换显式版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59268347/

相关文章:

python - pip install --editable 使用 VCS url

xcode - git(osis) 和 Xcode

docker - 公开在gitlab ci docker镜像中运行的服务器

docker - GitLab CI-无法从镜像内连接到Docker守护程序

GIT 或 Subversion - 如何忽略部分代码

git - Android Studio (IntelliJ) 空闲时自动 git fetch

go - 设置与 govendor 的依赖关系的具体提交

facebook - 如何让 martini-oauth2 与 Facebook 一起工作?

go - 在 Go 中生成私钥时使用什么类型的阅读器?

java - gitlab ci : mysql build and restore db dump