Skip to content

Latest commit

 

History

History
45 lines (31 loc) · 2.4 KB

File metadata and controls

45 lines (31 loc) · 2.4 KB

轻量级地克隆一个 Git 仓库

TL;DR

本文介绍了多种轻量级Git克隆方法:浅层克隆(--depth=1)仅获取最新数据;无内容克隆(--filter=blob:none)跳过文件内容;稀疏检出选择特定目录。通过参数组合(如--no-checkout+--sparse)可最小化下载量,但需权衡历史记录、文件完整性及网络条件选择合适方案。

Summary

文章详细介绍了多种轻量级克隆Git仓库的方法及其应用场景:

  1. Normal Clone

    • 下载完整仓库(包括所有提交、分支、文件),LLVM示例显示总大小约4.3GB(.git占2.2GB)。
    • 缺点:网络不稳易中断,无法断点续传。
  2. Shallow Clone

    • 使用--depth=1仅获取最新提交及默认分支,LLVM缩减到280MB.git
    • 牺牲提交历史,需git fetch --unshallow恢复完整历史。
    • 可叠加--filter=blob:none进一步减少下载,但需注意操作步骤。
  3. Blobless Clone

    • 通过--filter=blob:none跳过文件内容下载(仅保留提交历史和目录结构),LLVM的.git降至1.0G。
    • 配合--no-checkout避免生成工作目录,节省至742MB。
    • 缺点:无法直接查看文件内容,需后续按需下载。
  4. Treeless Clone

    • 使用--filter=tree:0省略目录结构信息,LLVM的.git仅225MB。
    • 适用于提交历史庞大的仓库,但无法与Blobless同时使用。
  5. Sparse Checkout

    • 配合git sparse-checkout仅下载指定目录,例如git clone --filter=blob:none --sparse后设置路径。
    • 示例显示GitLab仓库仅下载部分目录,大幅减少下载量。
  6. 组合方法

    • 最快方案git clone --filter=blob:none --no-checkout配合sparse-checkout,LLVM仅742MB。
    • 浅层+稀疏克隆--depth=1--sparse快速获取工作目录,但需后续unshallow恢复历史。
  7. 背景知识

    • Git对象类型:Blob(文件内容)、Tree(目录结构)、Commit(提交历史)、Ref(分支标签)。
    • 替代方案:使用云主机(如Azure)克隆后传输,适合网络较差的环境。

文章强调通过参数组合(如Shallow+Blobless+Bare)可极大减少下载量,同时需权衡历史记录、文件内容及网络条件选择合适方法。