首页/开发/Git 与协作速查/git bundle 离线打包传递
Git 基础与命令88 条

git bundle 离线打包传递

把对象与引用打包成单一文件:clone、fetch 可直接把它当远端使用,适合隔离网络环境搬运仓库。

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

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..BA 到 B 之间的新提交定期增量同步
--branches --tags全部分支加全部标签搭完整镜像
接收端 fetch 时要写明引用去向(repo.bundle main:main-from-bundle),只写文件名不会自动并入当前分支。打包前用 list-heads 记录引用清单,接收端逐条核对不遗漏。

易错点

  • 增量区间(如 v1.0..v1.1)要求两端引用在开发库中都存在,缺一端会报缺对象;打包前先 git bundle list-heads 核对引用是否齐全。
  • clone bundle 后 origin 指向的是 bundle 文件本身,基于它继续开分支会很别扭;克隆完立刻 remote set-url 指回正式仓库。
  • --all 会把所有分支和标签都打进去,可能夹带内部实验分支造成外泄;只打包对方需要的那部分引用。
  • bundle 是只读传输介质,不能往里 push;需要双向协作时用正式远端,或改用补丁文件走邮件流程。

数据来源与参考

  • Git 官方文档:git-bundle
  • Pro Git 2nd Edition · 4.6 打包
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌