系统版本:Window 10,Git 版本:2.7.1

对于大型 Git 仓库,每次执行 Git 命令,都需要经过漫长的等待,特别是要经常执行的 git status 命令。下面是一个例子…

图片加载中...

从 1.7.0 开始,Git 引入 sparse checkout(稀疏检出) 机制,稀疏检出机制允许只检出指定目录或者文件,这在大型 Git 仓库中,将大幅度缩短 Git 执行命令的时间。

要想只检出指定的目录或文件,需要在 .git/info/sparse-checkout 文件中指定目录或文件的路径,下面将以一个具体例子介绍 如何使用 Git 的 sparse checkout

准备远程仓库

初始化一个仓库,目录结构如下图所示:

图片加载中...

根目录下有 2 个子目录,以及一个 LICENSE 文件和 README.md 文件,每个子目录中各有 3 个。
将其推送到Github上新建的一个仓库,地址是 git@github.com:liangzai-cool/git-sparse-checkout-study.git

为Git配置稀疏检出

换一个目录,再初始化一个 Git 仓库,以便用稀疏检出的方式,检出刚才在 Github 上新建的 git-sparse-checkout-study 仓库:

图片加载中...

使用 git config core.sparseCheckout true 命令开启 Git 稀疏检出模式。然后编辑该仓库目录下的 .git/info/sparse-checkout 文件,指定检出规则。这里只检出 git-sparse-checkout-study 仓库中的 dir1 目录下的所有文件和 根目录下的 README.md 文件:

图片加载中...

检出

添加远程仓库地址,并检出:

图片加载中...

可以看到,Git 只检出了根目录下的 README.md 文件和 dir1 目录。

如果此时需要再检出,根目录下的 dir2 目录,则需要将其加入到 .git/info/sparse-checkout 文件中。参照下图中的方案:

图片加载中...

关闭稀疏检出

和上面检出 dir2 时类似:

图片加载中...

可以看到所有文件都已显示出来了。
注意这里的 echo 命令:

echo "/*" > .git/info/sparse-checkout

最后不要忘了配置 Git 的 core.sparseCheckoutfalse 以及移除 .git/info/sparse-checkout 文件。

.git/info/sparse-checkout 中使用和 .gitignore 相同的匹配模式,例如 非匹配 !/dir2/* 以及 /*.java 等。

About Me
后端开发工程师
GitHub Repos