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

mrphzbgm  于 2023-04-27  发布在  Go
关注(0)|答案(6)|浏览(129)

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

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将是提交哈希?应该手工找到并输入这些信息,还是有更好的方法?

4ktjp1zp

4ktjp1zp1#

只需'去获取'你想要的提交哈希:

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

hgc7kmma

hgc7kmma2#

除了来自埃弗顿的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文件中的伪版本,例如v0.0.0-20171006230638-a6e239ea1c69(这有助于基于标准semver排序提供所有版本的简单总排序)。

pcrecxhr

pcrecxhr3#

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

qq24tv8q4#

我一直在敲打我的头一段时间,它是如何为每个人工作,我不能运行它。对我来说,我不得不提交到主分支,然后只有我能够得到它。
为了让go get能够使用特定的分支、提交id或标记,您需要通过运行下面的命令为go模块启用一个标志
go env -w GO111MODULE=on
在这之后我们就能

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

sigwle7e5#

另外,如果你在go.mod文件中用latest这个词代替标签,它将被修改为模块的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

xv8emn3q

xv8emn3q6#

  • 从分支下载源代码

go get your-repo@branch-name读取输出,并将go模块版本添加到requirereplace

  • 去:下载github.com/your-repov1.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
以空格分隔:

  • your-repository v1.2.3-0.20210609123456-123123123*

相关问题