避坑:过早的文件结束符(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), 完成.
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |