![](/img/trans.png)
[英]How to import gitsubmodule containing golang code with go.mod and go.sum file
[英]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.mod
和go.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
一段时间以来,我一直在思考它如何适用于每个人,但我无法运行它。 对我来说,我必须提交到 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 添加到require
或replace
:go list -m -json your-repo@branch-name | jq '.|"\\(.Path) \\(.Version)"'
jq
- 手动组合结果的Path
和Version
值:go list -m -json your-repo@branch-name
如果你想指向一个分支的最新提交,你总是可以在go get
命令中指定分支名称:
go get your-repo@branch-name
它应该自动将其添加到您的go.mod
文件中。
用go 1.16
测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.