请注意!

Git 2.25 版本之后,新增了 sparse-checkout 功能,可以实现只拉取仓库的部分文件,而不是整个仓库的文件。

Git sparse-checkout

在有一次进行项目拉取时,我发现项目过大,但是我只想要其中的一小部分文件,于是就发现了 sparse-checkout 这个功能。下面记录一下使用方法。

# 先初始化仓库
git init

# 设置仓库的远程地址
git remote add origin ssh://github.com/xxx/xxx.git

# 开启 sparse-checkout 功能
git config core.sparsecheckout true

# 1. 设置需要拉取的文件夹 + 拉取代码
echo xxx >> .git/info/sparse-checkout
git pull origin master

# 2. 设置不拉取的文件夹 + 拉取代码
echo !xxx >> .git/info/sparse-checkout
git pull origin master

它的书写规则和 .gitignore 文件的规则是一样的,可以使用 ! 来排除文件夹。这里是官方文档的链接:https://git-scm.com/docs/git-sparse-checkout

举例

假如我的项目结构如下:

.
├── .git
├── .gitignore
├── _posts
├── _config.yml
├── drafts.md
├── Git-sparse-checkout.md
├── test.md
├── test2.md
├── assets
├── categories

我在拉取的时候,只想要拉取 _posts 文件夹,那么我只需要在 .git/info/sparse-checkout 文件中写入 _posts 即可。

echo _posts >> .git/info/sparse-checkout

如果我想拉取除了 _posts 文件夹之外的所有文件,那么我只需要在 .git/info/sparse-checkout 文件中写入 !_posts 即可。

echo !_posts >> .git/info/sparse-checkout

再或者我只想要拉取 _posts 文件夹下的所有 .md 文件,那么我只需要在 .git/info/sparse-checkout 文件中写入 _posts/*.md 即可。

echo _posts/*.md >> .git/info/sparse-checkout