Libon

加速 git clone 的速度

2022/10/27 通过设置 depth、single-branch 参数加快克隆速度 #git

ToC

git clone --depth=1 --single-branch git@github.com:xxx/xxx.git

--depth=1 表示只拉取最后一个 commit 记录,这会使得仓库的体积变小。 --single-branch 表示只拉取默认分支,不会附带其他分支的信息,这也会使得拉取的速度变快。

原理是只拉取最新版本的完整代码,从而舍弃以往的历史 commit 记录,git 中是通过 object 存储不同数据的:

然后 HEAD、branch、tag 等是指向具体 commit 的指针,可以在 .git/refs 下看到,所以说每个版本的代码都是从 commit 对象作为入口关联起来的。指定了 depth=1 的时候就是只保留了最新的入口,历史入口就没下载了,所以这也会导致 git reset --hard hashId 的时候会失败,因为本地并没有这个 commit 记录,即便是后续再 git pull 也下载不了历史 commit 记录,也切换不了其他的 branch。

如果想要解决没有历史 commit 记录的问题,可以加上 unshallow 参数重新拉取一次:

git pull --unshallow

而没有其他分支的情况则可以修改 fetch 命令的配置为:+refs/heads/*:refs/remotes/origin/*

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"

以上。

CD ..
接下来阅读
CSS 中的 100%