【发布时间】:2021-06-29 11:28:59
【问题描述】:
自 golang 1.13 以来,我一直遇到这个问题,如果给定的依赖项是分支上未发布的伪版本,我们的 docker 构建脚本(使用 go mod download 获取我们的依赖项)在 git fetch 期间失败。我目前使用的是 golang 1.15。
我正在尝试集成测试对引用的 go 包的一些更改。我会打电话给包裹example-go-sdk。在example-go-sdk 的git repo 中,我创建了一个分支并推送了一些更改。然后在使用example-go-sdk的golang项目中,我已经执行了:
go get local.url.that.utilizes.goprivate/path/example-go-sdk@824eebca783c68c5ef3cf6db35ad688ad30b58b0
该哈希是我的分支上的头部提交的哈希,我已经仔细检查过它是正确的并且确实有我的更改。 这个项目在本地编译就好了。即使是 go mod 下载也适合我。
但是,当从 golang:1.15-alpine docker 容器执行 go mod download 时(确保正确设置 GOPRIVATE 后),我收到此错误:
go: local.url.that.utilizes.goprivate/path/example-go-sdk@v1.1.2-0.20210329043657-824eebca783c: invalid pseudo-version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /go/pkg/mod/cache/vcs/369a4408a70eeb73ab52db67cb0c1ba8eb165df174d65c9ec995526a9545424b: exit status 128:
fatal: unresolved deltas left after unpacking
fatal: unpack-objects failed
有没有办法解决这个问题?由于其他一些要求,我无法在尝试引用它之前先将example-go-sdk 中的这个分支合并到 master 中。我已经确保 docker 构建使用的是正确版本的引用项目以及更新的 go.mod 和 go.sum。
尽管这一切对我来说都在本地工作,但其他几个团队成员在引用伪版本时也遇到了构建问题,所以我不确定是什么问题。
【问题讨论】:
-
这看起来更像是
git的问题,而不是 Go 的问题,但是您是否尝试过当前的 Go 版本来确定?您确定所有提交都正确推送吗?您使用的是旧版本的 git 吗?验证您是否可以自己使用 git 手动获取该提交,因为go工具只调用git,而git是这里失败的原因。 -
我自己和其他所有人都能够获取该分支并验证提交哈希是该分支上的头部提交。我们在 golang 1.13、1.14 和 1.15 中出现了这个问题,直到 1.13 才出现。我不热衷于升级过去,因为我们还不允许发布任何其他过去的东西。在我看来,这像是某种缓存问题,但不确定。如果我像 v1.2.0-pre 这样标记提交并以这种方式引用它,它就可以工作。
标签: git go go-modules