git clone --mirror 命令说明
git clone --mirror 用于创建一个镜像仓库 。它不仅会复制普通分支,还会复制远端仓库中的几乎所有引用(refs),包括分支、标签以及远程跟踪引用,通常用于仓库迁移、备份和镜像同步。
一、基本语法
bash
git clone --mirror <仓库地址>
例如:
bash
git clone --mirror https://github.com/example/project.git
执行后会生成一个 裸仓库(bare repository) ,目录名通常以 .git 结尾。
二、--mirror 的特点
和普通 git clone 相比,--mirror 有以下区别:
-
不会检出工作区
它创建的是裸仓库,没有可直接编辑的文件目录。
-
会复制所有 refs
包括:
- 本地分支映射
- 标签(tags)
- 远程跟踪分支
- 其他引用
-
会保留远端引用关系
适合后续执行完整推送,把仓库原样同步到另一个远端。
-
适合迁移 entire repository
尤其适用于把一个 Git 平台上的仓库完整迁移到另一个平台。
三、与 --bare 的区别
git clone --mirror 和 git clone --bare 都会创建裸仓库,但用途不同。
--bare
bash
git clone --bare <仓库地址>
特点:
- 创建裸仓库
- 不包含工作区
- 会复制版本历史和分支
- 不会像 mirror 一样完整映射所有 refs 配置
--mirror
bash
git clone --mirror <仓库地址>
特点:
- 也是裸仓库
- 会完整镜像远端 refs
- 会将远端的引用配置为镜像关系
- 更适合备份和迁移
可以简单理解为:
--bare:适合创建一个普通裸仓库--mirror:适合创建一个与源仓库高度一致的完整镜像
四、常见使用场景
1. 仓库迁移
先镜像克隆原仓库:
bash
git clone --mirror https://old.example.com/team/project.git
进入镜像仓库目录后,将其推送到新仓库:
bash
cd project.git
git push --mirror https://new.example.com/team/project.git
这样可以把原仓库的分支、标签等内容一并推送到新仓库。
2. 仓库备份
可以用它保留一个完整的 Git 仓库副本,便于后续恢复或审计。
3. 内网镜像同步
有些团队会把外部仓库镜像到内部 Git 服务中,减少网络依赖或统一管理。
五、配合 git push --mirror 使用
git clone --mirror 常常与 git push --mirror 搭配使用:
bash
git clone --mirror <源仓库>
cd xxx.git
git push --mirror <目标仓库>
注意:
git push --mirror会把本地 refs 完整同步到目标仓库。- 如果目标仓库中存在源仓库没有的分支或标签,这些引用可能会被删除。
- 因此在生产环境使用前要确认目标仓库是否允许被完整覆盖。
六、注意事项
-
不要把 mirror 仓库当作日常开发仓库使用
因为它是裸仓库,没有工作区。
-
推送镜像时要特别小心
git push --mirror可能会覆盖目标仓库中的现有 refs。 -
适合管理员或迁移场景
普通开发者日常拉代码通常只需要使用
git clone。 -
目录通常是
.git裸仓库目录例如
project.git/,里面存放的是 Git 元数据,而不是源码文件树。
七、一句话总结
git clone --mirror 的核心作用是:把远端仓库几乎原样复制为一个本地镜像仓库 ,常用于迁移、备份、同步,而不是日常开发。