如何将go.mod中的Go模块依赖性指向存储库中的最新提交?

时间:2018-12-08 11:53:31

标签: git go module

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

go mod init <package name>
go build

将生成go.modgo.sum文件,这些文件包含所有与软件包相关的版本。

如果模块没有任何版本,则使用该模块的最新提交。如果某个模块确实具有发行版,则将最新的一个作为依赖项。

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

看起来我可以用go.mod手动完成

module /my/module

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

其中v0.0.0与上次发布的发行标签不对应,20181121201909是提交时间戳,af044c0995fe是提交哈希吗?应该手动找到并输入此类信息,还是有更好的方法?

6 个答案:

答案 0 :(得分:18)

只需“转到”所需的提交哈希值即可:

go get github.com/someone/some_module@af044c0995fe

“获取”将正确更新依赖项文件(go.mod,go.sum)。

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

答案 1 :(得分:13)

除了Everton的answer使用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文件中的pseudo-version,例如v0.0.0-20171006230638-a6e239ea1c69。 (这有助于提供基于标准semver排序的所有版本之间的简单总排序。)

答案 2 :(得分:7)

一段时间以来,我一直在head头,它对每个人都有效,但我无法运行它。对我来说,我必须提交到master分支,然后才能够获得它。

要开始使用特定分支,提交ID或标记,请通过运行以下命令为go模块启用标志

go env -w GO111MODULE = on

在此之后我们将能够做

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

答案 3 :(得分: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

答案 4 :(得分:1)

此外,如果您在go.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

答案 5 :(得分:1)

  • 从分支下载源码
    go get your-repo@branch-name 使用要添加到 requirereplace 的 go 模块版本读取输出:
    去:下载github.com/your-repo v1.2.3-0.20210609123456-123123123
  • 稍后可以找到此版本作为以下命令的输出字符串
    go list -m -json your-repo@branch-name | jq '.|"\(.Path) \(.Version)"'
  • 如果您的 PC 上未安装 jq - 手动组合 PathVersion 结果的值:
    go list -m -json your-repo@branch-name
    以空格分隔:
    您的存储库 v1.2.3-0.20210609123456-123123123