【git 代码仓库优化,体积很大clone报错early EOF】

git 仓库体积很大,clone报错early EOF

前言

代码仓体积大,大概1.7G,git clone时报错,
背景:早期前端不是自动化打包,开发本地打包后 压缩成zip包push到git库交给同事放到服务器。
fatal: the remote end hung up unexpectedly1 MiB | 4.27 MiB/s
fatal: early EOF

体积大原因

  1. 版本历史(每次提交包括文件的不同版本、元数据等)都会被存储在 Git 仓库中。如果你曾经有过大文件被添加到仓库中,后来虽然删除了,但这些文件的历史记录仍然会存在于仓库;
  2. Git 虽然会对文件进行压缩存储,但这种压缩并不一定能使仓库的大小显著减小。一些二进制文件(如图片、视频、大型文档等)本身的压缩效果可能有限。而且,如果仓库中曾经包含过这些文件,即使被删除了,也可能会影响仓库的整体大小;
  3. 项目包含子模块,git clone主项目时,默认情况下只会克隆子模块的引用而不下载实际内容。但使用了–recursive参数 会克隆子模块的内容。如果子模块本身比较大就会导致内容很大;

解决方式

一、浅克隆

  1. clone 最近100次提交, 参数正整数即可。 你如果不需要完整的仓库,可以添加分支参数,并且只需要执行第一步
git clone --depth 100  git地址
  1. 从远程仓库获取完整的提交历史,使本地仓库变为完整克隆
git fetch --unshallow
  1. 查看所有分支。还是只有默认分支,继续执行 git fetch --unshallow,git提示: 在完整的库中执行没有意义
    在这里插入图片描述

  2. 查看抓取配置,发现只有 master, 那么问题就出在这里,修改一下

// 查看抓取配置
git config remote.origin.fetch
//输出: +refs/heads/master:refs/remotes/origin/master
// 修改一下 重新查看
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git config remote.origin.fetch
//输出: +refs/heads/*:refs/remotes/origin/*
  1. 更新本地仓库, 查看分支,成功
git remote update

在这里插入图片描述

二、清理版本历史

git filter-branch 命令重写提交历史时,它会改变原有的提交结构和相关信息。在很多协作式的 Git 仓库环境中,远程仓库会设置预接收(pre-receive)钩子(hook),来验证你是否在推送别人的提交。

如果你的项目从开始阶段只有你维护、只有你的提交历史,你可以直接尝试。
你确保你的远程仓库没有这个hook,或者你有足够权限能修改hook,你也可以尝试。
否则,你需要联系管理员,协助你临时修改预接收钩子的配置,允许你这次的推送。

清理版本历史原文

### 解决方案 当 Git 和底层的 `curl` 库在处理 HTTP/2 协议时出现问题时,可能会导致诸如 'Clone failed' 的错误。这通常发生在特定网络配置或服务器实现下[^1]。为了绕过此问题并成功克隆项目到 IntelliJ IDEA 中,可以采取以下措施: #### 方法一:强制 Git 使用 HTTP/1.1 通过修改全局配置文件,使 Git 强制使用 HTTP/1.1 版本而非默认的 HTTP/2。 运行以下命令以更改设置: ```bash git config --global http.version HTTP/1.1 ``` 该方法能够有效规避因 HTTP/2 处理不当而引发的问题。 #### 方法二:调整超时时间 如果连接失败是因为网络延迟较高,则可以通过增加超时时间来解决问题。执行如下命令延长等待时限: ```bash git config --global http.postBuffer 524288000 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 ``` 这些参数分别设置了上传缓冲区大小以及低速传输条件下的容忍度,从而减少断连的可能性。 #### 方法三:手动下载 Gradle Wrapper 文件 对于提到的 Gradle Wrapper 下载失败情况 (`gradle wapper download fail`) ,可考虑直接访问目标 URL 并将其保存至本地对应目录下替代自动获取流程。具体操作步骤包括但不限于确认所需资源链接地址无误后再实施转移动作;另外也可以尝试更换不同的镜像源站点来进行重试尝试直至顺利完成为止。 此外,在企业防火墙或者代理环境下工作时,还需要特别注意是否需要额外指定代理信息给Git工具本身知晓如何穿越受限环境完成外部请求交互过程中的认证授权机制验证环节等方面的内容细节部分则需视具体情况另行探讨研究分析得出结论才行哦! --- ### 注意事项 - 如果上述解决方案仍然无法奏效,建议检查当前使用的 Git 版本是否存在已知缺陷,并及时更新至最新稳定版本。 - 对于持续集成环境中频繁发生的此类现象,应深入排查是否有更深层次的原因存在,比如 DNS 配置异常或是 SSL/TLS 握手阶段产生的兼容性矛盾等问题所在之处值得进一步挖掘探索发现真相啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值