git - 如何在未发布的伪版本中使用 Go Mod 下载
问题描述
自 golang 1.13 以来,我一直遇到这个问题,go mod download
如果给定的依赖项是分支上未发布的伪版本,我们的 docker 构建脚本(使用 获取我们的依赖项)在 git fetch 期间失败。我目前正在使用 golang 1.15。
我正在尝试集成测试对引用的 go 包的一些更改。我会打电话给包裹example-go-sdk
。在 git repo for 中example-go-sdk
,我创建了一个分支并推送了一些更改。然后在使用的golang项目中example-go-sdk
,我执行了:
go get local.url.that.utilizes.goprivate/path/example-go-sdk@824eebca783c68c5ef3cf6db35ad688ad30b58b0
该哈希是我分支上的头部提交的哈希,我已经仔细检查过它是正确的并且确实有我的更改。该项目在本地编译就好了。甚至 go mod 下载也适合我。
但是,当go mod download
从 golang:1.15-alpine docker 容器中执行时(确保 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
and go.sum
。
尽管这一切对我来说都在本地工作,但其他几个团队成员在引用伪版本时也遇到了构建问题,所以我不确定这是什么问题。
解决方案
在可预见的将来,该go
命令确实并将继续支持提交的伪版本。这看起来像是您的存储库中的数据损坏,或者您的git
服务器和/或客户端中的错误。
由于失败的命令是git fetch
尝试解决存储库中现有分支和标签的命令,因此我的猜测是该问题会影响存储库中的某些非默认分支或某些现有标签。这可以解释为什么您的预发布标签解决方法有效:如果go
命令可以找到特定的匹配标签,那么它不需要回退到获取“所有分支和标签”,并且可能不会触发潜在git
问题。
git
您也许可以通过在您的 repo 的新克隆中尝试失败的命令来开始缩小范围:
git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/*
请注意,您可以将-x
标志传递给go
命令以使其(非常冗长!)打印git
它执行的所有命令。这可能会帮助您重现触发底层错误的确切存储库配置。
推荐阅读
- excel - Excel 是否自动应用过滤器
- sql - 如何用单词替换字母数字字符串中的数字
- c++ - C++ 中的多线程分子模拟
- reactjs - React.ForwardRef TypeScript 组件类型错误
- kotlin - 如何使用执行错误检查的自定义设置器初始化属性?
- javascript - 在 chrome 浏览器中使用 indexedDB 时有大小限制吗?
- sql - 如何在 Oracle 中获得自然数字排序顺序?
- google-apps-script - 仅将当前工作表导出到 Excel 的功能,其中包含值和格式
- dns - 具有自定义域的无法访问的 gitlab 页面
- angular - 用户导航前的补丁