繁体   English   中英

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

[英]How to point Go module dependency in go.mod to a latest commit in a repo?

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

go mod init <package name>
go build

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

如果模块没有任何版本,则使用该模块的最新提交。 如果模块确实有版本,则最新的版本将被选为依赖项。

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

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

module /my/module

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

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

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

go get github.com/someone/some_module@af044c0995fe

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

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

除了埃弗顿关于使用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排序的所有版本的简单总排序)。

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

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

去 env -w GO111MODULE=on

在此之后,我们将能够做到

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

如果您想临时替换本地目录的依赖项(例如,如果您同时处理 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

此外,如果您将单词 latest 放在 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

  • 从分支下载源
    go get your-repo@branch-name read output with go module version 添加到requirereplace
    去:下载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

如果你想指向一个分支的最新提交,你总是可以在go get命令中指定分支名称:

go get your-repo@branch-name

它应该自动将其添加到您的go.mod文件中。

go 1.16测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM