--depth
我们经常会用 git clone 来下载项目,但遇到大项目的时候,clone 就很慢,比要等很久。
当然,还有更慢的项目。这类项目可以通过 --depth 1 来加速:
git clone --depth 1 https://github.com/facebook/react
这速度快了有几十倍吧!越大的项目加速效果越明显。下载下来的代码少了历史 commit
当 git clone 下载大项目的时候,加个 --depth 1 可以提速几十倍。
下载下来的项目也可以正常的 pull 和 push。
这是因为 git 是通过 commit、tree、blob 的对象存储的,每个 commit 是关联这些对象的入口。
depth 1 只会下载最后一个 commit 关联的 object,下载内容更少,所以速度快很多。
但这种方式有两个问题:
- 切换不到历史 commit
- 切换不到别的分支
没有历史 commit 可以通过 git pull --unshallow 解决。
切不到别的分支是因为 fetch 配置导致的,配置成 +refs/heads/*:refs/remotes/origin/* 也就可以了,也就是拉取远程所有分支代码到本地。
这样再 fetch 和 pull 就会拉取所有分支的新 commit,也可以正常的切分支。
--depth 1 在下载大项目的时候,或者 build 时下载代码的时候,都很有意义。它提高下载速度导致的俩后遗症也都可以解决。