为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
ITMISS 2023-05-15 14:49:11
从 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提交哈希?这些信息是应该手工查找和输入,还是有更好的方法?
查看完整描述

5 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

只需“获取”您想要的提交哈希:

go get github.com/someone/some_module@af044c0995fe

'go get' 将正确更新依赖文件(go.mod、go.sum)。


查看完整回答
反对 回复 2023-05-15
?
LEATH

TA贡献1936条经验 获得超6个赞

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

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

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


查看完整回答
反对 回复 2023-05-15
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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


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


查看完整回答
反对 回复 2023-05-15
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

一段时间以来,我一直在思考它是如何为每个人工作的,但我无法运行它。对我来说,我必须提交到 master 分支,然后我才能得到它。


要使用特定的分支、提交 ID 或标签,您需要通过运行以下命令为 go 模块启用标志


去环境-w GO111MODULE=on


在此之后我们将能够做到


go get repo@branchname

go get repo@tag

go get repo@commithash


查看完整回答
反对 回复 2023-05-15
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

此外,如果您在 go.mod 文件中使用 latest 一词代替标签,它将更改为模块的最新标签。


例如:


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


查看完整回答
反对 回复 2023-05-15
  • 5 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信