git sparse checkout 的正确操作方式

网上有的文章修改 .git/info/sparse-checkout 以进行 sparse checkout,实际上 git 有自带的 sparse-checkout 命令。

操作步骤

带参数克隆仓库

1
git clone --no-checkout --sparse --filter=blob:none [email protected]:<username>/<repo>.git
参数含义
--no-checkout不 checkout 到 HEAD
--sparse开启 sparse-checkout 功能
--filter=blob:none不下载 blob 对象(重要,否则还是需要下载大量数据)

refs: git clone

进入目录

1
cd <repo>

指定需要 checkout 的目录

1
git sparse-checkout add <path/to/>

refs: git sparse-checkout

注意:默认情况下 sparse-checkout 为 cone 模式。默认情况下 sparse-checkout 会包含根目录下的文件。
cone 模式存在诸多问题,因此 git 官方文档不建议使用非 cone 模式。
详见文档。

进行 checkout

1
git checkout [<branch>]

可以看到下载的数据和等待的时间大大减少,

1
2
3
4
5
6
7
8
9
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 31 (delta 0), reused 0 (delta 0), pack-reused 20
Receiving objects: 100% (31/31), 616.91 KiB | 636.00 KiB/s, done.
Resolving deltas: 100% (1/1), done.
Updating files: 100% (32/32), done.
Already on 'main'
Your branch is up to date with 'origin/main'.