如果一个Git仓库很大,有成千上万的代码,要把这些代码全部checkout出来,耗时长且占空间。如果你的目的只是为了快速修改某个子目录下的一个文件,完整checkout出全部代码就显得很悲催了。所幸的是,Git支持Sparse Checkout,可以只checkout部分目录。

sparse checkout的原理很简单。你要做两步,第一步是把选项core.sparseCheckout置为true

git config –global core.sparseCheckout true

第二步是修改$GIT_DIR/info/sparse-checkout文件,把你想要的文件列在里面。sparse-checkout文件的格式和gitignore格式类似,下面是一个例子:

/*
!unwanted

上面的例子checkout除了unwanted以外的所有文件。

一个具体的实例

https://github.com/quicwg/base-drafts为例,执行下面命令:

git clone --depth=1 --no-checkout https://github.com/quicwg/base-drafts
cd  base-drafts
git checkout

可以看到工作目录里面有下面这些文件

CONTRIBUTING.md  draft-ietf-quic-http.md      draft-ietf-quic-transport.md
Makefile         draft-ietf-quic-recovery.md
README.md        draft-ietf-quic-tls.md

现在我们只想挑选draft-ietf-quic-http.md这个文件做修改,可以执行:

echo “draft-ietf-quic-http.md” > .git/info/sparse-checkout

然后再执行

git checkout

可以看到当前目录只剩一个draft-ietf-quic-http.md文件。

(完)

其他参考: