--single-branch 必须配合 -b 指定分支才有效,否则仅拉远程 head 所在分支;与 --depth=1 组合可最小化体积和速度;残留 remote tracking refs 不占空间,需手动 prune 清理。

git clone --single-branch 用对了才能省空间
默认 git clone 会拉下所有分支的全部历史,哪怕你只想要 main 或 release/v2.3。加 --single-branch 才真能跳过其他分支的提交对象,体积通常能少 30%–70%,尤其对历史久、分支多的仓库效果明显。
但这个参数必须配合 -b <branch-name></branch-name> 一起用,否则它默认只拉 HEAD 指向的分支(可能是远程的 main,而不是你心里想的那个):
-
git clone -b dev --single-branch https://github.com/user/repo.git→ 只拉dev分支 -
git clone --single-branch https://github.com/user/repo.git→ 拉远程HEAD所在分支(不一定是main,可能早被设成next) - 如果远程没设
HEAD(比如裸仓库或某些 CI 产出库),命令会失败并报错:remote HEAD refers to nonexistent ref
git clone --depth=1 能不能和 --single-branch 一起用
能,而且推荐组合使用——--depth=1 做浅克隆,只取最新一次提交;--single-branch 防止意外带入其他分支引用。两者叠加后,本地仓库几乎只剩当前分支的最新快照,体积最小、速度最快。
注意:浅克隆默认是 --single-branch 的,但显式写出来更安全,避免不同 Git 版本行为差异:
-
git clone -b feat/login --single-branch --depth=1 https://github.com/user/repo.git→ 安全、明确、轻量 - 不加
--single-branch时,某些 Git 版本仍可能在.git/refs/remotes/origin/下创建空引用,虽不下载对象,但会多出少量元数据 - 浅克隆后无法
git log查历史,也不能git checkout其他提交——这不是 bug,是设计如此
克隆完发现还是有其他分支的 remote tracking refs
这是常见误解:即使用了 --single-branch,git branch -r 仍可能显示一堆 origin/xxx ——但它们只是引用(ref),不是实际对象。真正占用空间的是 .git/objects/ 里的压缩包,而这些“残留”引用并不带来额外体积。
GitHub 仓库备份技能 - 将 OpenClaw 工作空间自动或手动备份至 GitHub 私有仓库。支持自动定时备份和手动交互式配置,引导完成 Token 配置、仓库创建、首次备份及定时任务设置。用途:(1) 首次设置 (2) 日常备份。
如果你连这点引用都不想要,克隆后立刻执行:
-
git remote set-branches origin "target-branch"→ 把远程跟踪分支列表缩成一个 -
git fetch --prune→ 清掉本地已不存在的origin/xxx引用 - 或者更彻底:
git config --remove-section remote.origin再重配git remote add origin <url></url>,但一般没必要
CI/CD 里用浅克隆要注意 fetch 深度和触发逻辑
GitHub Actions、GitLab CI 默认开启浅克隆,但深度常为 1 或 50,不一定够用。比如你要基于上一个 tag 构建,而最近 1 次提交没有 tag,git describe --tags 就会失败。
这时不能只靠 --single-branch,得调深 fetch 深度:
- GitHub Actions 中设
fetch-depth: 0表示全量(慎用),或指定具体数字如fetch-depth: 100 - GitLab CI 用
variables: GIT_DEPTH: "100" - 如果只是想拿到最近 tag,
--tags参数比加深度更轻量:git clone --single-branch --tags --depth=1 <url></url>,但注意--tags会拉所有 tag 对象,不局限于当前分支
真正容易被忽略的是:有些 CI 环境(比如自建 runner)根本没开浅克隆,你以为加了 --single-branch 就万事大吉,结果日志里悄悄下了 2GB 对象——建议在脚本开头加 du -sh .git/objects 快速验证。










