如何将 go.mod 中的 Go 模块依赖项指向 repo 中的最新提交?

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


go mod init <package name>

go build

将生成go.mod包含go.sum包依赖项的所有已找到版本的文件。如果模块没有任何版本,则使用该模块的最新提交。如果模块确实有版本,则最新的版本将被选为依赖项。


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


module /my/module

    

require (

    ...

    github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe

    ...

)

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


ITMISS
浏览 137回答 5
5回答

蓝山帝景

只需“获取”您想要的提交哈希:go get github.com/someone/some_module@af044c0995fe'go get' 将正确更新依赖文件(go.mod、go.sum)。

LEATH

go get github.com/someone/some_module@af044c0995fe,您还可以使用分支名称,例如:go get github.com/someone/some_module@mastergo get github.com/someone/some_module@dev_branch这些示例在相应的分支上获得最新的提交。它仍然会在您的文件中记录为伪版本go.mod,例如v0.0.0-20171006230638-a6e239ea1c69. (这有助于基于标准semver排序提供跨所有版本的简单总排序)。

慕尼黑5688855

如果你想临时替换本地目录的依赖项(例如,如果你同时处理 2 个模块),你可以replace在文件末尾添加语句go.mod:module example.com/mypkggo 1.15require (&nbsp; gitlab.com/someone/a_package v0.14.2)replace gitlab.com/someone/a_package => ../my_forks/a_package

扬帆大鱼

一段时间以来,我一直在思考它是如何为每个人工作的,但我无法运行它。对我来说,我必须提交到 master 分支,然后我才能得到它。要使用特定的分支、提交 ID 或标签,您需要通过运行以下命令为 go 模块启用标志去环境-w GO111MODULE=on在此之后我们将能够做到go get repo@branchnamego get repo@taggo get repo@commithash

呼啦一阵风

此外,如果您在 go.mod 文件中使用 latest 一词代替标签,它将更改为模块的最新标签。例如:module /my/modulerequire (...github.com/someone/some_module latest...)会变成module /my/modulerequire (...github.com/someone/some_module v2.0.39...)跑步后go mod tidy
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go