git bundle 是什么
git bundle 把仓库里的对象和引用打包成单一文件,clone、fetch、pull 可以把它当远端地址直接使用(填本地文件路径即可)。它的角色是「离线搬运通道」:对端完全无法访问网络、或只允许单向摆渡文件时,用它搬运提交、分支与标签;接收端先校验再拉取,流程与连正常远端一致。
基本信息
| 适用平台 | 任意安装 Git 的系统(Linux、macOS、Windows 通用) |
|---|---|
| 生成命令 | git bundle create <文件> <引用或区间> |
| 校验命令 | git bundle verify <文件> |
| 查看引用 | git bundle list-heads <文件> |
| 能力边界 | 只读介质:可被 clone 或 fetch,不能 push 回去 |
典型使用场景
- 隔离网络摆渡:内网机器不能连外网 Git 服务器,用 U 盘拷贝 bundle 文件搬运提交。
- 增量同步镜像:以「旧标签..新标签」区间生成增量包,每次只传新增对象,摆渡流量可控。
- 交付评审快照:把待评审分支打包给外部评审人,不开放仓库整体访问权限。
- 归档发布标签:把发布标签打包留档,日后先用 verify 校验文件完整再恢复。
- 灾备兜底:仓库迁移前把关键引用打成 bundle 异地存放,不依赖托管平台。
常用示例
常用示例
git bundle create repo.bundle --all # 全量:所有分支和标签
git bundle create inc.bundle v1.0..v1.1 # 增量:只含两标签之间的新提交
git bundle verify repo.bundle # 校验文件完整且引用齐全
git bundle list-heads inc.bundle # 打包前核对里面有哪些引用
git clone repo.bundle myrepo # 把 bundle 当远端克隆
git fetch repo.bundle main:main-from-bundle # 已有仓库里把分支拉进来
git remote set-url origin <正式仓库地址> # 克隆后改回正式远端再继续用常用形态对照
| 打包写法 | 包含内容 | 适用场景 |
|---|---|---|
| --all | 全部分支与标签 | 首次全量搬运 |
| 分支名 | 该分支可达的提交 | 只传一条线 |
| A..B | A 到 B 之间的新提交 | 定期增量同步 |
| --branches --tags | 全部分支加全部标签 | 搭完整镜像 |
接收端 fetch 时要写明引用去向(repo.bundle main:main-from-bundle),只写文件名不会自动并入当前分支。打包前用 list-heads 记录引用清单,接收端逐条核对不遗漏。