2

我想需要一个尚未转换为使用模块的 Go 包的某个版本,我想在我的go.mod文件中需要它。具体来说,包是“github.com/docker/docker/pkg/system@v19.03.13”

当我运行以下命令时,我得到以下输出:

$ go get -v github.com/docker/docker/pkg/system@v19.03.13
go: found github.com/docker/docker/pkg/system in github.com/docker/docker v17.12.0-ce-rc1.0.20200916142827-bd33bbf0497b+incompatible

如您所见,v17.12.0-ce下载的是版本,而不是v19.03.13. 我确实也注意到了“+incompatible”后缀,但我不确定这与这个问题有什么关系。根据文档

go 命令在没有 go.mod 文件的主要版本 2 或更高版本的版本中添加一个 +incompatible 后缀。+incompatible 表示一个版本与具有较低主要版本号的版本属于同一模块;因此,go 命令可能会自动升级到更高+不兼容的版本,即使它可能会破坏构建。

所以我知道这个包没有go.mod文件,但是下载的版本(17.x)大于2,所以我认为不是+incompatible问题。

我的问题是:当我指定版本v19.03.13时,为什么要安装v17.12.0-ce

是我要使用的版本

是下载的那个

4

1 回答 1

3

go.mod 版本中列出的版本对于不是 go 模块的存储库无关紧要。该版本v19.03.13不是语法上有效的语义版本,因此 go 工具会沿着提交树查找一个,它遇到的第一个有效 semver 恰好是v17.12.0(这不是语义版本,但它至少是有效的)。只要 go 本身可以重现和解析结果,领先版本不是伪版本中所期望的事实就不是问题。

如果您查看尾随提交哈希,您有bd33bbf0497b,这是标签的正确提交 ID v19.03.13

于 2020-10-01T17:15:23.677 回答