当前位置: 首页 > news >正文

避坑:过早的文件结束符(EOF):解决“git clone龙蜥OS源码失败”的失败过程

避坑:过早的文件结束符(EOF):解决“git clone龙蜥OS源码失败”的失败过程


安装Anolis OS 8.9

下载AnolisOS-8.9-x86_64-dvd.iso并安装。

使用uname -a查看内核版本为5.10.134-18.an8.x86_64。

[root@localhost cloud-kernel]# cat /etc/anolis-release 
Anolis OS release 8.9
[root@localhost cloud-kernel]# uname -a
Linux localhost.localdomain 5.10.134-18.an8.x86_64 #1 SMP Fri Dec 13 16:32:58 CST 2024 x86_64 x86_64 x86_64 GNU/Linux

通过HTTPS协议git clone内核代码库出错

1. 找到git clone命令

打开网址:https://gitee.com/anolis/cloud-kernel

点击**“克隆/下载”按钮,选择“HTTPS"**标签,复制命令到终端执行:
git clone https://gitee.com/anolis/cloud-kernel.git
在这里插入图片描述

2. git clone出错

git clone 过程中出现 过早的 EOF无效的 index-pack 输出 错误!

# git clone https://gitee.com/anolis/cloud-kernel.git
正克隆到 'cloud-kernel'...
remote: Enumerating objects: 11174639, done.
remote: Counting objects: 100% (192/192), done.
remote: Compressing objects: 100% (152/152), done.
致命错误:过早的文件结束符(EOF)9), 1.71 GiB | 532.00 KiB/s   
致命错误:fetch-pack:无效的 index-pack 输出

尝试解决

1. 增大 http.postBuffer - 失败

网上很多人推荐设置这个参数,该参数用于设置 HTTP 传输的缓冲区大小.

应该设置多大呢?

监控git clone执行过程中的物理内存占用情况,以下图为例:
在这里插入图片描述
(1)当git clone接收对象的大小为833.58MiB,占比15%,可以算出最终大小为5557MiB.
(2)通过top可以看到此时共4个git相关进程在运行,统计RES列(RES代表实际占用物理内存,单位为KB),共占用内存587680KB,大概587MB,是git clone统计值的70%(587/833.58)。

所以设置8GB的http.postBuffer应该是OK的。

git config --global http.postBuffer 8192000000 # 8GB(单位:字节)

但是最终还是出现同样的错误结果。即使我把虚拟机的内存调整到了16GB,依然出错。

2. 使用 SSH 协议 - 失败

AI推荐:如果 HTTP 仍失败,尝试改用 SSH 协议:

失败了!

# git clone git@gitee.com:anolis/cloud-kernel.git
正克隆到 'cloud-kernel'...
remote: Enumerating objects: 11175278, done.
remote: Counting objects: 100% (182/182), done.
remote: Compressing objects: 100% (100/100), done.
[session-3c4d478c] Grpc Upload Pack error: rpc error: code = DeadlineExceeded desc = context deadline exceeded
fetch-pack: unexpected disconnect while reading sideband packet
致命错误:过早的文件结束符(EOF)
致命错误:fetch-pack:无效的 index-pack 输出

AI再次推荐:

git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
git config --global core.askPass /bin/echo
echo "ServerAliveInterval 60" | tee -a ~/.ssh/config
echo "ServerAliveCountMax 3" | tee -a ~/.ssh/config

再次失败!

3. 分阶段克隆 部分成功

先浅克隆最新提交,再逐步拉取完整历史:

git clone --depth=1 https://gitee.com/anolis/cloud-kernel.git
cd cloud-kernel
git fetch --unshallow
  • git clone --depth 1 <repository_URL> 只会获取最新的提交(提交历史为1),而不会获取整个提交历史。-成功
  • git fetch --unshallow 从远程仓库中拉取所有剩余的历史记录,使你的本地仓库包含完整的提交历史。-失败
[root@localhost ~]# git clone --depth 1 https://gitee.com/anolis/cloud-kernel.git
正克隆到 'cloud-kernel'...
remote: Enumerating objects: 88308, done.
remote: Counting objects: 100% (88308/88308), done.
remote: Compressing objects: 100% (74784/74784), done.
remote: Total 88308 (delta 6224), reused 41862 (delta 3011), pack-reused 0
接收对象中: 100% (88308/88308), 207.88 MiB | 480.00 KiB/s, 完成.
处理 delta 中: 100% (6224/6224), 完成.
正在更新文件: 100% (86470/86470), 完成.
[root@localhost ~]# cd cloud-kernel/
[root@localhost cloud-kernel]# git branch -av
* devel-5.10                19cfe5c48 anolis: sw64: ftrace: implement ftrace_modify_call
  remotes/origin/HEAD       -> origin/devel-5.10
  remotes/origin/devel-5.10 19cfe5c48 anolis: sw64: ftrace: implement ftrace_modify_call
[root@localhost cloud-kernel]# git log --pretty=oneline
19cfe5c48c07acb188677ca573b51f3135d0adc6 (grafted, HEAD -> devel-5.10, origin/devel-5.10, origin/HEAD) anolis: sw64: ftrace: implement ftrace_modify_call
[root@localhost cloud-kernel]# git fetch --unshallow
错误:RPC 失败。curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104
致命错误:预期 'acknowledgments'

4. 最终折中的办法

先用git clone --depth 1拉取分支,然后用git fetch --depth 50拉去更深的commit信息。

[root@localhost test]# git clone --depth 1 -b release/release-5.10.134-18.y https://gitee.com/anolis/cloud-kernel.git
正克隆到 'cloud-kernel'...
remote: Enumerating objects: 88068, done.
remote: Counting objects: 100% (88068/88068), done.
remote: Compressing objects: 100% (74582/74582), done.
remote: Total 88068 (delta 6210), reused 41793 (delta 3006), pack-reused 0
接收对象中: 100% (88068/88068), 207.65 MiB | 480.00 KiB/s, 完成.
处理 delta 中: 100% (6210/6210), 完成.
正在更新文件: 100% (86236/86236), 完成.

[root@localhost test]# cd cloud-kernel/

[root@localhost cloud-kernel]# git fetch --depth 50
remote: Enumerating objects: 412, done.
remote: Counting objects: 100% (412/412), done.
remote: Compressing objects: 100% (149/149), done.
remote: Total 324 (delta 273), reused 225 (delta 175), pack-reused 0
接收对象中: 100% (324/324), 64.88 KiB | 810.00 KiB/s, 完成.
处理 delta 中: 100% (273/273), 完成 86 个本地对象.
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 4 (delta 0), pack-reused 0
展开对象中: 100% (4/4), 647 字节 | 647.00 KiB/s, 完成.
来自 https://gitee.com/anolis/cloud-kernel
 * [新标签]              5.10.134-18 -> 5.10.134-18
 * [新标签]              5.10.134-18_rc1 -> 5.10.134-18_rc1
 * [新标签]              5.10.134-18_rc2 -> 5.10.134-18_rc2
 * [新标签]              5.10.134-18_rc2.1 -> 5.10.134-18_rc2.1

后记:我的环境没问题

同样的环境,尝试git clone linux官方代码数,完全没有问题。

而且看到,接收的对象大小为2.88GiB,比Anolis的1.71GiB还大。

到底是谁的问题呢?

[root@localhost ~]# git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
正克隆到 'linux'...
remote: Enumerating objects: 10668274, done.
remote: Counting objects: 100% (171/171), done.
remote: Compressing objects: 100% (119/119), done.
remote: Total 10668274 (delta 97), reused 89 (delta 52), pack-reused 10668103
接收对象中: 100% (10668274/10668274), 2.88 GiB | 1.98 MiB/s, 完成.
处理 delta 中: 100% (8773900/8773900), 完成.
正在检查对象: 100% (33554432/33554432), 完成.
正在更新文件: 100% (87905/87905), 完成.

相关文章:

  • 面试编程题
  • 【DeepSeek问答】QProcess::start是异步的吗?会使UI卡顿吗?
  • Java锁代码解析
  • 迅为RK3568开发板篇Openharmony配置HDF控制UART-UART 接口运作机制
  • Solon —— 容器
  • 【R语言】绘图
  • V4L2驱动之UVC
  • 【LLAMA】羊驼从LLAMA1到LLAMA3梳理
  • C语言——时基
  • 广度优先搜索详解--BFS--蒟蒻的学习之路
  • 【哇! C++】类和对象(一)
  • ⭐ Unity 横向滑动列表 首尾相连 轮转图
  • 在Linux上安装和使用Docker
  • 嵌入式linux利用标准字符驱动模型控制多个设备方法
  • STM32 USB 设备的描述信息作用
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑰】
  • git,gitea - tool - creat Gitea Empty Rep Dir
  • 【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示
  • nginx负载均衡, 解决iphash不均衡的问题之consistent
  • 【时时三省】(C语言基础)用N-S流程图表示算法
  • 苏州集团网站设计定制/培训机构排名全国十大教育机构排名
  • 山东住房和建设厅网站/西安seo
  • 网站建设seo策略/关键词优化的主要工具
  • 果农在哪些网站做推广/短视频运营是做什么的
  • 网上最可靠的保险平台/window优化大师官网
  • 骨干专业建设验收网站/最新足球赛事