镜像克隆是什么
git clone --mirror 得到的是包含全部引用的裸仓库:不只是分支,连远端跟踪引用、标签与仓库配置一并复制,因此它能一比一还原来源仓库的引用结构。最常见的用途是仓库迁移与备份——镜像下来之后用 git push --mirror 整体推到新地址。要注意镜像仓库的抓取规则是强更新的,它不是拿来日常开发的副本,只适合做中转与冷备份。
基本信息
| 用途 | 仓库迁移、镜像与冷备份 |
|---|---|
| 产物 | 裸仓库,含 refs/* 全量引用 |
| 推送 | git push --mirror <目标地址> |
| 校验 | git show-ref 对比源库与目标库引用数 |
| 平台 | 任意 Git 客户端与托管平台 |
典型使用场景
- 把仓库从一个平台整体迁移到另一个平台
- 为重要仓库做一份包含全部分支与标签的冷备份
- 内网搭建只读镜像,供离线环境或加速访问
- 迁移前先镜像留底,出问题可快速回退
- 核对两处仓库的引用是否一致,确认迁移完整
- 把 fork 的全部引用一次性带走
常用示例
常用示例
git clone --mirror git@example.com:team/repo.git repo-mirror.git
cd repo-mirror.git
git show-ref | wc -l # 记录引用数量
git push --mirror git@example.com:team/newrepo.git # 整体推送
git fetch --prune # 同步源库已删除的引用镜像仓库与普通克隆
| 维度 | 镜像克隆 | 普通克隆 |
|---|---|---|
| 引用范围 | 全部引用(含远端跟踪与标签) | 默认只取分支 |
| 工作区 | 无,裸仓库 | 有 |
| 抓取行为 | 强更新,覆盖本地引用 | 不覆盖 |
镜像仓库包含 refs/remotes 等全部引用,推送到目标前确认目标库允许覆盖;refs/pull 之类的临时引用可能一并带上,需要时先清理。
迁移的完整步骤
- git clone --mirror 取源库,记录引用总数作为基准
- 用 git show-ref 核对分支与标签是否齐全
- git push --mirror 推到目标地址
- 在目标侧再数一次引用,与基准比对
- 保留镜像副本一段时间,确认新库可用后再清理