You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git clone --mirror与git clone --bare区别及Gerrit迁GitLab咨询

git clone --bare 与 git clone --mirror 核心区别

两个参数生成的都是没有工作区的裸仓库,但拉取范围、默认配置存在本质差异:

  • git clone --bare
    仅拉取源仓库的本地分支、标签引用(即refs/heads/*、refs/tags/*路径下的内容),默认不会拉取远程跟踪分支、代码评审记录、提交备注等其他路径下的引用;同时克隆完成后不会配置全量匹配的推送规则,后续执行推送时需要手动指定要同步的引用范围,适合搭建公共Git服务端存储普通仓库的场景,不是为全量迁移设计的。
  • git clone --mirror
    隐含--bare的裸仓库属性,但是会拉取源仓库下所有路径的引用:包括全部分支、全部标签、远程跟踪分支、Gerrit特有的评审记录引用(refs/changes/*)、提交备注(refs/notes/*)等所有存在于源仓库的Git对象;同时克隆完成后会自动配置全量匹配的refspec规则,后续执行推送时默认会同步所有引用,设计初衷就是用于仓库跨实例镜像、全量迁移场景。
Gerrit 迁移 GitLab 方案选择

优先选择git clone --mirror + git push --mirror的组合,原因是Gerrit作为代码评审系统,除了普通代码分支标签外,还存储了大量评审相关的特殊引用,用--mirror克隆可以保证第一次拉取时不遗漏任何仓库对象,避免迁移后出现历史提交关联丢失、评审记录查不到的问题。
具体操作步骤如下:

  • 提前在GitLab侧创建完全空白的目标仓库,不要初始化README、LICENSE、默认分支保护规则等初始内容,避免推送时出现引用冲突。
  • 在可同时访问私有Gerrit、GitLab网络的机器上执行全量镜像克隆:
git clone --mirror <你的Gerrit仓库SSH/HTTP地址> repo.git
  • 进入克隆生成的裸仓库目录:
cd repo.git
  • 执行镜像推送到GitLab目标地址:
git push --mirror <你的GitLab空仓库SSH/HTTP地址>

注意:如果使用git clone --bare的方案,哪怕后续执行git push --mirror,也只会推送你本地裸仓库里实际拉到的分支、标签内容,Gerrit存的评审记录、特殊备注等引用从一开始就没被拉到本地,自然没法同步到GitLab,属于不全量的迁移,除非你明确不需要保留任何Gerrit侧的评审相关历史,否则不推荐用这个方案。

内容的提问来源于stack exchange,提问作者Omkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 23:15:59