如何点Go模块的依赖在Go。Mod到回购中的最新提交?

从v1.11开始,Go添加了对模块的支持。命令

go mod init <package name>
go build

将生成go.modgo.sum文件,其中包含包依赖项的所有找到的版本。

如果模块没有任何版本,则使用该模块的最新提交。如果一个模块确实有版本,则会选择最新的版本作为依赖。

然而,有时我需要尚未发布的版本中的功能,但来自该版本之后提交的功能。如何设置go.mod不指向模块的发布,而是指向模块存储库中的特定提交?

看起来我可以在go中徒手完成。国防部和

module /my/module


require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)

其中v0.0.0不对应于最后发布的发布标签,20181121201909将是一个提交时间戳和af044c0995fe将是提交哈希?这些信息是否应该手工查找和输入,还是有更好的方法?

210500 次浏览

只需在你想要的提交哈希中“go get”:

go get github.com/someone/some_module@af044c0995fe

'go get'将正确地更新依赖文件(go。国防部,go.sum)。

更多信息:https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies

此外,回答从Everton上使用go get github.com/someone/some_module@af044c0995fe来获得特定的提交,你还可以使用分支名称,例如:

  • go get github.com/someone/some_module@master
  • go get github.com/someone/some_module@dev_branch

这些示例获得相应分支上的最新提交。

它仍然会被记录为pseudo-version在你的go.mod文件中,比如v0.0.0-20171006230638-a6e239ea1c69。(这有助于提供基于标准semver排序的所有版本的简单总排序)。

一段时间以来,我一直在思考它是如何为每个人工作的,而我却无法运行它。对我来说,我必须承诺主分支,然后只有我能够得到它。

为了go使用特定的分支,提交id或标记,您需要通过运行以下命令为go模块启用一个标志

go env -w GO111MODULE=on

在这之后,我们就能做了

go get repo@branchname
go get repo@tag
go get repo@commithash

此外,如果在go中将单词latest替换为标记。Mod文件它将被更改为模块的最新标签。

例如:

module /my/module


require (
...
github.com/someone/some_module latest
...
)

将成为

module /my/module


require (
...
github.com/someone/some_module v2.0.39
...
)

运行go mod tidy

如果你想临时替换一个本地目录的依赖项(例如同时处理2个模块),你可以在go.mod文件的末尾添加replace语句:

module example.com/mypkg


go 1.15


require (
gitlab.com/someone/a_package v0.14.2
)


replace gitlab.com/someone/a_package => ../my_forks/a_package
  • 从分支下载源代码 go get your-repo@branch-name 读取输出,go模块版本将添加到requirereplace:
    去:下载github.com/your-repo v1.2.3-0.20210609123456-123123123
  • 以后可以在以下命令的输出字符串中找到这个版本
    go list -m -json your-repo@branch-name | jq '.|"\(.Path) \(.Version)"' < / >
  • 如果您的PC上没有安装jq -手动合并result from的PathVersion值:go list -m -json your-repo@branch-name
    go list -m -json your-repo@branch-name
    以空格分隔:
    存储库v1.2.3 - 0.20210609123456 - 123123123