docker Go模块提取旧版本的包

cygmwpex  于 2022-12-03  发布在  Docker
关注(0)|答案(6)|浏览(133)

我正在尝试添加一个新的包到我的项目中去。这个包使用github.com/docker/docker/client,并且在项目外工作的很好。当我运行go mod vendor时,它会拉v1.13.1版本的docker客户端包,它没有我在代码中使用的一些方法。但是在go模块中它被标记为最新的。2我如何让go模块使用真正最新版本的软件包呢?

tkqqtvp1

tkqqtvp11#

Go Wiki: Modules:
如果需要,可以使用go get foo@v1.2.3go get foo@mastergo get foo@e3702bed2等命令或直接编辑go.mod来选择更具体的依赖关系版本。
如果需要master分支上的最新提交,请使用

go get github.com/docker/docker/client@master
46qrfjad

46qrfjad2#

这也快把我逼疯了:下载“master”或“latest”标签通常会下载HEAD之前的一两个提交版本。我在这里找到了答案:
go命令默认从proxy.golang.org上的公共Go模块镜像下载模块。它也默认根据sum.golang.org上的公共Go校验和数据库验证下载的模块,而不考虑其来源。这些默认值适用于公共源代码。
而且很明显存在一些缓存;如果你等待一段时间,它通常开始工作,或者它有助于临时设置版本到一个特定的提交。
为了解决这个问题,我设置了GOPRIVATE=github.com/myuser

t3psigkw

t3psigkw3#

为了获取最新的未标记版本,您需要指定在执行go get时要使用的commit标记

go get github.com/docker/docker/client@[commit-hash]
35g0bw71

35g0bw714#

建议使用一个特定的版本(首选的标记版本,如果不是最新的伪版本而不是主版本)。在go.mod文件中锁定依赖版本可以确保可重复性。
其中一个go代理中可用的最新版本是https://search.gocenter.io/github.com~2Fdocker~2Fdocker/info?version=v1.14.0-0.20190511020111-3998dffb806f

l7mqbcuq

l7mqbcuq5#

花了过去的20个小时试图修复一个类似的问题,在我的情况下,以下步骤解决了问题:
1.删除$GOPATH/pkg/sumdb
1.删除go.mod和go.sum文件
1.重新创建模块:go mod初始化名称
1.去测试。/...

7d7tgy0s

7d7tgy0s6#

我的情况与最初的问题并不完全一致,但我觉得有必要提一下,帮助其他与我处境相似的人:

内容

  • 正在使用私有模块,即一个从私有git仓库托管的Go模块。
  • 访问私有回购 * 不是问题 *。
  • 将对私有模块进行更改并将更改推送到私有模块。
  • 导入了私有模块的程序在运行go get时会一直提取旧版本,即使在运行以下命令后也是如此:
go clean -modcache
rm go.sum
go get
go mod tidy

根本原因:我是个白痴

  • 我忘了Go语言使用VCS标记和版本控制。
  • 无法更新标记以匹配当前提交。
    修复
  • 版本 * 还没有准备好 * 被迁移(学习,在这里),所以,在private模块中,我运行了下面的命令来将版本与当前提交对齐:
    • 注意:* 这假定所有存储库内容都已暂存/提交/推送.
  • 在私有模块存储库中 *
git tag -d v0.0.0
git push --delete v0.0.0
git tag v0.0.0
git push origin v0.0.0
  • 在导入私有回购协议的回购协议中 *
go clean -modcache
rm go.sum
go get
go mod tidy

相关问题