主页 > 手机  > 

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

避坑:过早的文件结束符(EOF):解决“gitclone龙蜥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命令

打开网址: gitee /anolis/cloud-kernel

点击**“克隆/下载”按钮,选择“HTTPS"**标签,复制命令到终端执行: git clone gitee /anolis/cloud-kernel.git

2. git clone出错

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

# git clone gitee /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 :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 gitee /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 gitee /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 gitee /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, 完成. 来自 gitee /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 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), 完成.
标签:

避坑:过早的文件结束符(EOF):解决“gitclone龙蜥OS源码失败”的失败过程由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“避坑:过早的文件结束符(EOF):解决“gitclone龙蜥OS源码失败”的失败过程