向Git前进(三) | 稀疏检出sparse checkout
Photo by Jake Lorefice
on Unsplash
前言
Git开发流程整理并实践完之后,先找了个小项目试水。用来试水的项目体积有1.5G,里面充斥着各种图片和视频。
但是公司内部带宽有限,拉取速度非常慢,所有的组员只能挨个拉取。由于公司内前后端分工明确,前端同事只负责视图修改,不碰控制器,而后端也只修改控制器,不碰样式。所有的人都不会碰视频。于是笔者利用等待间隙研究git的部份拉取功能。
过程
- 新开了一个目录,添加origin路径,先不进行拉取。
- 开启“稀疏检出”设置
git config core.sparsecheckout true
- 设置需要检出的文件或文件夹路径
echo "path1/" >> .git/info/sparse-checkout
表示需要检出的文件夹为path1echo "path2/" >> .git/info/sparse-checkout
表示需要检出的文件夹为path2
4.1 或设置不需要检出的文件或文件夹路径echo "/*" >> .git/info/sparse-checkout
表示需要检出的文件夹为所有echo "!PATH/" >> .git/info/sparse-checkout
表示不需要检出的文件夹为PATH
注: 假如设置的是不需要检出的路径,则sparse-checkout
第一行必须是/*
,后面以!unwant_path/
来设置不想检出的路径。 - 拉取
git pull origin master
结果
根据此处的注解,和实际测试。
- 先从Github上拉了一个笔者自创的项目进行稀疏检出测试。
- 设置
sparse-checkout
文件,限定了需要检出的文件和文件夹。123$ cat .git/info/sparse-checkoutapiHead.phpdb/
- 设置
- 拉取项目1234567$ git pull origin masterremote: Counting objects: 39, done.remote: Total 39 (delta 0), reused 0 (delta 0), pack-reused 39Unpacking objects: 100% (39/39), done.From github.com:***/**** branch master -> FETCH_HEAD* [new branch] master -> origin/master
- 拉取项目
- 查看项目,验证了稀疏检出的效果。项目目录中只检出了事先设定的文件夹和文件,但是用来测试的项目体积太小了,无法检验是否下载了所有的文件。12$ lsapiHead.php db/
- 查看项目,验证了稀疏检出的效果。项目目录中只检出了事先设定的文件夹和文件,但是用来测试的项目体积太小了,无法检验是否下载了所有的文件。
接着直接上手进行公司内网GitLab的稀疏检出测试。
- 设置
sparse-checkout
文件。123$ cat .git/info/sparse-checkoutindex.phpApplication/
- 设置
- 拉取项目,0%1234$ git pull origin masterremote: Counting objects: 35326, done.remote: Compressing objects: 100% (34490/34490), done.Receiving objects: 0% (194/35326), 23.19 MiB | 1.17 MiB/s
- 拉取项目,0%
- 拉取项目,100%123456789$ git pull origin masterremote: Counting objects: 35326, done.remote: Compressing objects: 100% (34490/34490), done.remote: Total 35326 (delta 734), reused 35326 (delta 734)Receiving objects: 100% (35326/35326), 1.45 GiB | 1.23 MiB/s, done.Resolving deltas: 100% (734/734), done.From *.*.*.*:GROUP/PROJECT* branch master -> FETCH_HEAD* [new branch] master -> origin/master
- 拉取项目,100%
- 根据测试结果,虽然设置了稀疏检出,也只检出了
sparse-checkout
中设置的文件夹和文件,但是依然完整下载了整个项目。12$ lsindex.php Application/
- 根据测试结果,虽然设置了稀疏检出,也只检出了
总结
根据测试结果得出,sparse-checkout(稀疏检出)功能,会下载所有的文件,但是只检出符合sparse-checkout文件内筛选条件的文件或文件夹。该功能能省下硬盘空间,但是省不了带宽。