系统版本: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.sparseCheckout
为 false
以及移除 .git/info/sparse-checkout
文件。
.git/info/sparse-checkout
中使用和 .gitignore
相同的匹配模式,例如 非匹配 !/dir2/*
以及 /*.java
等。