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

git clone --mirror 镜像克隆

镜像克隆得到包含全部引用(分支、标签与远端配置)的裸仓库,常用于仓库迁移与站点镜像,配合 push --mirror 整体推送。

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

镜像克隆是什么

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 推到目标地址
  • 在目标侧再数一次引用,与基准比对
  • 保留镜像副本一段时间,确认新库可用后再清理

易错点

  • 把镜像仓库当日常工作副本使用,每次 fetch 都会强更新引用,本地改动容易莫名丢失
  • 推送前不核对目标库状态,--mirror 会连删除动作一起同步,可能抹掉目标库已有的分支
  • 迁移后不从引用数量上核对完整性,漏掉分支或标签往往到使用时才被发现
  • 镜像里可能带着平台特有的临时引用,直接推上去会污染目标仓库
  • 只做一次镜像就不再更新,长期备份需要定期 fetch --prune 才能跟上源库变化

数据来源与参考

  • Git 官方文档:git-clone(--mirror)
  • Git 官方文档:git-push(--mirror)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌