平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Git仓库过大致使clone失败问题及解决”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
Git仓库过大致使clone失败


remote: Enumerating objects: 2308, done.
remote: Counting objects: 100% (1351/1351), done.
remote: Compressing objects: 100% (850/850), done.
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
error: 7667 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
原因分析
实际处理时,一般这种情况都是因为项目分支过多,导致你要下载的东西太多,从而引起这个问题。
网上有一个流传比较多的修改方案:
git config --global core.compression -1
采用上述命令,来修改压缩模式,尝试过了没有用。
解决思路
从实现思路看,引起这个问题的根源是文件过多,所以我们能够分批次下载文件,先下载一部分,再下载剩下的。
以下是解决方案:
关闭 core.compression
git config --global core.compression 0
拿到最近一次提交
采用depth这个指令来下载最近一次提交
git clone --depth 1 [仓库链接]

拿到完整库
git fetch --unshallow
期间有可能失败,重试一下,如果还不行,试试延长克隆时间

成功后,整个仓库就都下载下来了,包括历史的提交
延长克隆的时间
git config --global http.postBuffer 600000
pull一下查看状态,问题解决
git pull --all

能够看到代码库已经完成clone。
经过分支名称去拉取分支信息以及checkout
git branch -a
git remote set-branches origin '远程分支名称'
git fetch --depth 1 origin 远程分支名称
git checkout 远程分支名称
借助镜像网站
将链接中的 github.com 替换为 github.com.cnpmjs.org 或其他镜像地址
如果报以下错误
Could not resolve host: github.com.cnpmjs.org
在git控制台上输入下面这句,随后在正常去拉取,它会使你默认采用镜像
git config --global url."https://github.com.cnpmjs.org/".insteadOf https://github.com/
如果需替换回原来的默认地址
git config --global url."https://github.com/".insteadOf https://github.com.cnpmjs.org/
总结
落到代码里,总的来说,Git仓库过大适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。