克隆AOSP仓库报fatal: fetch-pack: invalid index-pack错误如何解决
报错诱发原因
- 网络传输异常:deqp仓库体积超过2G,大文件传输过程中如果出现网络抖动、代理节点不稳定、运营商流量限制,会导致传输的压缩数据包校验失败,触发
inflate解压缩报错。你调整的http.postBuffer参数仅解决单次提交的大小限制,无法修复传输导致的数据损坏问题。 - 本地缓存损坏:之前浅克隆生成的临时缓存文件存在损坏,执行
git fetch --unshallow转换完整克隆时读取错误缓存,触发数据不一致报错。 - 上游镜像数据异常:你使用的AOSP同步节点临时同步故障,存储的deqp仓库对象存在损坏,拉取后无法通过校验。
- 挂载分区限制:你当前操作的
/run目录属于临时内存挂载分区,默认存在容量上限、写入生命周期限制,大文件写入过程中容易出现静默损坏,导致最终拉取的对象文件校验失败。
解决方案
按优先级依次尝试即可:
- 更换拉取工作目录:避开
/run这类临时挂载分区,选择剩余空间大于20G的普通用户目录作为拉取路径,消除临时分区的容量、权限限制影响。 - 调整Git拉取参数,优先使用按需拉取策略:
关闭Git传输压缩,避免解压缩环节出错:git config --global core.compression 0
不要使用浅克隆转全克隆的方式拉取,按需拉取对应分支的内容即可:
仅拉取当前分支最新代码:git clone https://android.googlesource.com/platform/external/deqp -b master --depth 1
如果是用repo同步AOSP,仅同步deqp依赖项:repo sync -c -j4 external/deqp - 更换AOSP镜像源:切换到国内同步稳定的AOSP镜像节点,避免跨境网络传输的丢包、数据损坏问题。
- 清理损坏缓存重试:如果不想重新克隆现有仓库,在deqp目录下执行
git gc --prune=all清理所有损坏的缓存对象后,再重新执行拉取操作。 - 更换传输协议:将http/https拉取协议更换为ssh协议,ssh传输的校验机制更严格,出现静默数据损坏的概率更低。
内容的提问来源于stack exchange,提问作者koniety
相关产品推荐
相关产品推荐

