如何将自托管GitLab仓库迁移至新实例并保留历史,有无简易方法?
GitLab仓库迁移:除备份恢复外的简便方案
备份恢复并不是唯一可行的迁移方式,针对单仓库或批量仓库的迁移场景,有更轻量化的操作方法,具体如下:
单个仓库迁移(完整保留提交、分支、标签)
方法1:镜像推送法
- 在新GitLab实例创建空仓库(不要初始化README、.gitignore等文件)
- 在本地或旧服务器克隆旧仓库的裸版本:
git clone --mirror <旧仓库Git地址> - 进入克隆的裸仓库目录,添加新仓库作为远程地址:
cd <仓库名称>.git git remote add new-origin <新仓库Git地址> - 推送所有内容至新仓库:
git push new-origin --mirror
该命令会同步所有分支、标签、提交记录,完全复刻旧仓库的完整状态。
方法2:GitLab原生导入功能
若两个GitLab实例网络互通,直接在新GitLab的仓库创建页选择**「Import project」,再选择「GitLab self-managed」**,填入旧仓库地址及访问凭证(私有仓库需提供令牌或SSH密钥),即可自动完成迁移,无需本地操作。
批量迁移多个仓库
通过GitLab API编写脚本批量处理,效率更高:
- 调用旧GitLab API获取所有仓库列表:
curl --header "PRIVATE-TOKEN: <旧实例个人访问令牌>" "https://旧GitLab地址/api/v4/projects?per_page=100" - 编写Shell/Python脚本,遍历仓库列表,自动执行镜像推送步骤;或调用新GitLab API创建仓库并发起导入请求。
额外注意事项
- 若仓库包含LFS对象,需先在旧仓库执行
git lfs fetch --all,推送时补充git lfs push new-origin --all - 私有仓库迁移前需确保操作账号拥有旧仓库的读取权限、新仓库的写入权限
- 迁移完成后,建议核对新仓库的分支、标签、提交记录及LFS对象的可用性
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

