# git sparse checkout (稀疏检出)

有时候我们只想拉取某个仓库的部分代码,那么我们可以这么做。以https://github.com/antfu/unplugin-vue-components仓库为例,我们只想拉去examples/vue-cli目录下的文件,具体步骤如下

  1. mkdir unplugin-vue-cli
  2. cd unplugin-vue-cli
  3. git init
  4. git remote add origin https://github.com/antfu/unplugin-vue-components.git
  5. git config core.sparsecheckout true
  6. echo "examples/vue-cli/" >> .git/info/sparse-checkout
  7. git pull origin main

执行以上7个步骤就完成对examples/vue-cli的克隆

# 排除的例子

我们现在想克隆app下除了CD目录外的其他文件

app
├── components
|   ├── A  
|   |   └── Index.vue 
|   ├── B 
|   |   └── Index.vue 
|   ├── C 
|   |   └── Index.vue 
|   ├── D 
|   |   └── Index.vue 
├── router
|   └── index.js
├── readme.md
├── exposure.js
├── intersection-observer.js
├── wb.js
└── index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  1. 在项目的.git/info目录下建立sparse-checkout
  2. 输入
/*
!/components/
/components/A
/components/B
1
2
3
4
  1. 要保留的写在下面

# sparse-checkout 文件设置

# 子目录的匹配

在 sparse-checkout 文件中,如果目录名称前带斜杠,如/docs/,将只匹配项目根目录下的docs目录,如果目录名称前不带斜杠,如docs/,其他目录下如果也有这个名称的目录,如test/docs/也能被匹配。 而如果写了多级目录,如docs/05/,则不管前面是否带有斜杠,都只匹配项目根目录下的目录,如test/docs/05/不能被匹配fd

# 通配符 ““ (星号)匹配

在 sparse-checkout 文件中,支持通配符 ““,如可以写成以下格式:

  • docs/*
  • index.*

# 排除项 “!” (感叹号)匹配

在 sparse-checkout 文件中,也支持排除项 “!”,如只想排除排除项目下的 “docs” 目录,可以按如下格式写:!/docs/

# 相关文章

  1. git sparse checkout (稀疏检出) (opens new window)
  2. 官方文档 (opens new window)