很多时候,我们不要拉取一整个项目,只需要拉取项目中的某个子目录。例如我使用go进行后端开发,需要将前端的静态文件打包进来作为一个单独的文件发布。这种情况,我就可以要求前端的小伙伴将编译后的静态文件也上传到git服务器,然后我仅仅将他编译后的静态文件拉到我的项目中就行了,其它的前端源文件我就不需要了。

初始化空库

mkdir <repo>创建一个文件夹,示例:

$ mkdir statics

初始化git

$ cd statics
$ git init
已初始化空的 Git 仓库于 /home/trevanlye/work/vscode/gdpu/build/statics/.git/

添加远程库

git remote add -f origin <url>,示例:

$ git remote add -f origin git@github.com:trevanlye/dpufront.git
更新 origin 中
remote: Enumerating objects: 3827, done.
remote: Counting objects: 100% (3625/3625), done.
remote: Compressing objects: 100% (3461/3461), done.
remote: Total 3827 (delta 2574), reused 180 (delta 109), pack-reused 202
接收对象中: 100% (3827/3827), 69.50 MiB | 2.35 MiB/s, 完成.
处理 delta 中: 100% (2655/2655), 完成.
来自 github.com:trevanlye/dpufront
 * [新分支]          master     -> origin/master
 * [新标签]          20220307_添加设备前 -> 20220307_添加设备前
 * [新标签]          V2-20210915         -> V2-20210915   

开启sparse checkout

设置 core.sparsecheckouttrue

$ git config core.sparseCheckout true

设置需要拉取的子目录

echo "some/dir/" >> .git/info/sparse-checkout ,示例:

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

如果有多个子目录,则可以使用子目录路径替代“some/dir/”后多次执行该指令。

将子目录拉取到本地

origin的名称对应远程库自定义的名称,每次执行都需要完成的代码,不能仅仅执行“git pull”。

$ git pull origin master
来自 github.com:trevanlye/dpufront
 * branch            master     -> FETCH_HEAD