Unsplash
Photo by Jake Lorefice on Unsplash

Contents
  1. 1. 前言
  2. 2. 过程
  3. 3. 结果
  4. 4. 总结
  5. 5. 下一步
    1. 5.1. Reference

前言

Git开发流程整理并实践完之后,先找了个小项目试水。用来试水的项目体积有1.5G,里面充斥着各种图片和视频。
但是公司内部带宽有限,拉取速度非常慢,所有的组员只能挨个拉取。由于公司内前后端分工明确,前端同事只负责视图修改,不碰控制器,而后端也只修改控制器,不碰样式。所有的人都不会碰视频。于是笔者利用等待间隙研究git的部份拉取功能。

过程

  1. 新开了一个目录,添加origin路径,先不进行拉取。
  2. 开启“稀疏检出”设置
    git config core.sparsecheckout true
  3. 设置需要检出的文件或文件夹路径
    echo "path1/" >> .git/info/sparse-checkout表示需要检出的文件夹为path1
    echo "path2/" >> .git/info/sparse-checkout表示需要检出的文件夹为path2
    4.1 或设置不需要检出的文件或文件夹路径
    echo "/*" >> .git/info/sparse-checkout表示需要检出的文件夹为所有
    echo "!PATH/" >> .git/info/sparse-checkout表示不需要检出的文件夹为PATH
    : 假如设置的是不需要检出的路径,则sparse-checkout第一行必须是/*,后面以!unwant_path/来设置不想检出的路径。
  4. 拉取
    git pull origin master

结果

根据此处的注解,和实际测试。

  • 先从Github上拉了一个笔者自创的项目进行稀疏检出测试。
    • 设置sparse-checkout文件,限定了需要检出的文件和文件夹。
      1
      2
      3
      $ cat .git/info/sparse-checkout
      apiHead.php
      db/
    • 拉取项目
      1
      2
      3
      4
      5
      6
      7
      $ git pull origin master
      remote: Counting objects: 39, done.
      remote: Total 39 (delta 0), reused 0 (delta 0), pack-reused 39
      Unpacking objects: 100% (39/39), done.
      From github.com:***/***
      * branch master -> FETCH_HEAD
      * [new branch] master -> origin/master
    • 查看项目,验证了稀疏检出的效果。项目目录中只检出了事先设定的文件夹和文件,但是用来测试的项目体积太小了,无法检验是否下载了所有的文件。
      1
      2
      $ ls
      apiHead.php db/
  • 接着直接上手进行公司内网GitLab的稀疏检出测试。

    • 设置sparse-checkout文件。
      1
      2
      3
      $ cat .git/info/sparse-checkout
      index.php
      Application/
    • 拉取项目,0%
      1
      2
      3
      4
      $ git pull origin master
      remote: Counting objects: 35326, done.
      remote: Compressing objects: 100% (34490/34490), done.
      Receiving objects: 0% (194/35326), 23.19 MiB | 1.17 MiB/s
    • 拉取项目,100%
      1
      2
      3
      4
      5
      6
      7
      8
      9
      $ git pull origin master
      remote: 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
    • 根据测试结果,虽然设置了稀疏检出,也只检出了sparse-checkout中设置的文件夹和文件,但是依然完整下载了整个项目。
      1
      2
      $ ls
      index.php Application/

总结

根据测试结果得出,sparse-checkout(稀疏检出)功能,会下载所有的文件,但是只检出符合sparse-checkout文件内筛选条件的文件或文件夹。该功能能省下硬盘空间,但是省不了带宽。

下一步

向Git前进(四) | 暂存区和gitignore相关

Reference

Git只获取部分目录的内容(稀疏检出) - zhgcao
git能否只拷贝某几个文件或者文件夹? - 知乎

Contents
  1. 1. 前言
  2. 2. 过程
  3. 3. 结果
  4. 4. 总结
  5. 5. 下一步
    1. 5.1. Reference