Linux下迁移GitLab项目的常用方式与步骤
一、方式总览与选择建议
| 方式 | 适用场景 | 是否保留完整历史 | 是否迁移用户/组/权限 | 主要优点 | 主要限制 |
|---|---|---|---|---|---|
| 官方备份恢复(gitlab-rake) | 同版本迁移、整实例搬迁 | 是 | 是 | 简单可靠、官方支持 | 版本需一致,跨大版本需升级后再迁 |
| 手工镜像推送(git clone/fetch + push) | 少量项目、跨实例/跨域名 | 是 | 否 | 不依赖实例整体迁移 | 需逐项目操作,元数据需另行处理 |
| 第三方工具 Congregate | 大规模全量迁移(项目/组/用户) | 是 | 是 | 批量编排、可回滚 | 需准备机器与Token,学习成本 |
二、官方备份恢复整实例迁移(推荐)
前提
步骤
sudo gitlab-rake gitlab:backup:createsudo gitlab-rake gitlab:backup:restore BACKUP=1626676976_2021_07_19_13.3.5-eesudo gitlab-ctl reconfigure && sudo gitlab-ctl start三、手工镜像推送迁移(少量项目、跨实例)
git clone --mirror http://old-gitlab/group/project.gitcd project.gitgit remote set-url origin http://new-gitlab/group/project.gitgit push --mirror四、使用 Docker 的场景
docker exec -it gitlab-ce-13.3.5-ee gitlab-rake gitlab:backup:createdocker cp gitlab-ce-13.3.5-ee:/var/opt/gitlab/backups/xxx.tar /host/backups/docker run -d --hostname gitlab -p 443:443 -p 80:80 -p 22:22 \ --name gitlab \ -v /opt/gitlab_docker/config:/etc/gitlab \ -v /opt/gitlab_docker/logs:/var/log/gitlab \ -v /opt/gitlab_docker/data:/var/opt/gitlab \ gitlab/gitlab-ee:13.3.5-ee.0docker cp /host/backups/xxx.tar gitlab:/var/opt/gitlab/backups/docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=1626676976_2021_07_19_13.3.5-eedocker exec -it gitlab gitlab-ctl reconfigure && gitlab-ctl restart五、大规模全量迁移工具 Congregate(项目/组/用户)
./congregate.sh list 与 ./congregate.sh ui 选择需要迁移的对象(Projects/Groups/Users),生成 staged_*.json。/congregate.sh migrate ...,先迁移用户,再迁移组与项目,支持重试与分批(wave)。六、常见问题与注意事项
git push --mirror,完成后恢复保护策略。