首页/开发/Git 与协作速查/git clone --depth 浅克隆
Git 基础与命令88 条

git clone --depth 浅克隆

浅克隆只取有限条提交:--depth=N 控制深度,明显减少拉取体积与时间,适合 CI 与只需要新近代码的场景;代价是历史不完整。

Git 与协作速查开发更新于 2026-10-13

浅克隆是什么

git clone --depth N 只取回最近 N 条提交的快照,而不是完整历史。它的收益直接体现在克隆时间与磁盘占用上,代价是历史不完整:早期提交不在本地,需要历史信息的命令会受限。适合只需要最新代码的场景,例如构建与部署。

浅到什么程度合适

--depth 1 在 CI 和只做构建的场景最常见;需要看最近的改动轨迹时,--depth 20 或 50 更实用。要取多个分支的历史,还得显式加 --no-single-branch,因为 --depth 隐含只取单分支。取回之后发现历史不够用,可以继续加深,不必重新克隆。

基本信息

适用平台Linux / macOS / Windows(Git 1.9 起支持 --unshallow)
语法git clone --depth <N> <仓库地址>
隐含影响只取当前分支,等价于加了 --single-branch
补历史git fetch --depth N 继续加深,--unshallow 补全
产物仍是正常仓库,只是历史被截断
适用场景CI 构建、部署机、只需要最新代码

典型使用场景

  • CI 构建:只取最新提交,缩短检出耗时
  • 部署机:只需要能跑起来的代码,不需要历史
  • 快速验证:临时克隆看代码,不必拿完整记录
  • 大仓库起步:完整克隆太慢时先用浅克隆拿到基线
  • 逐步补全:后续用 fetch 加深到实际需要的深度

常用示例

常用示例
git clone --depth 1 https://github.com/org/repo.git   # 只取最新一次提交
git clone --depth 50 --no-single-branch https://example.com/org/repo.git
git rev-parse --is-shallow-repository   # 确认是否为浅仓库
git fetch --depth 200                   # 在浅克隆里继续加深
git fetch --unshallow                   # 补全为完整仓库
git log --oneline | head -3             # 核对可用的历史范围

浅克隆的影响

场景完整仓库浅克隆
git log 全量历史可查全部提交只有最近若干条
git blame 早期行能追到最初修改可能停在边界提交
git bisect 定位可覆盖全部范围范围受限
合并到旧基线正常执行可能因缺少公共祖先失败
磁盘占用完整对象库明显更小
浅克隆下 git log、blame、bisect 与合并基线分析都可能不准确。需要评审历史或定位回归时,先把历史补全再动手。
--depth 隐含 --single-branch。需要多分支历史时必须显式加 --no-single-branch,否则其它分支的提交根本不在本地。

易错点

  • 默认 --depth 隐含 --single-branch,需要多分支历史时要显式加 --no-single-branch
  • 在浅克隆上直接变基或合并到较旧的基线可能失败,先 fetch --unshallow 再操作
  • 把浅克隆当普通仓库使用,历史类命令结果不完整,容易误判成提交不存在
  • 浅克隆的边界提交缺少父提交信息,涉及历史遍历的脚本需要额外判断

数据来源与参考

  • Git 官方文档:git-clone(--depth)
  • Git 官方文档:git-fetch(--unshallow/--depth)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌