GitLab 带commit历史迁移至 Gerrit

最终验证可行的方案:

1. git clone Gerrit空仓库

2. git remote set-url gitlab_url (旧仓库)

3. git branch -r | grep -v ‘\->’ | while read remote; do git branch –track “${remote#origin/}” “$remote”; done

跟踪远程所有分支
关于 ${}特殊用法的介绍,参考链接
上述语句中,${remote#origin/} 的作用与 ${remote#*/} 相同

4. git pull –all –allow-unrelated-histories

指定允许拉取不相关的代码过来Merge, 有多个分支时,要把多个分支都拉下来,注意用户名: git config username
注释: git pull = git fetch + git merge

5. git remote set-url Gerrit_url

(指定新 Gerrit 代码库的地址)

6. git push -u origin –all
git push -u origin –tags

把代码推送给 Gerrit 仓库

觉得这张图对关系的描述比较清晰,放着参考用:

历史参考资料:

GitLab项目迁移到Gerrit

通过Git命令从GitLab将某分支拷贝到Gerrit

这篇文章写得比较有自己的观点:

gitlab迁移到gerrit

重点是说明了如下关键信息:

推送所有分支和标签到gerrit上:
git push –all ; git push –tags

注:这里不能用git push –mirror 是因为gerrit服务端新建的库有个refs/meta/config 包含有权限信息,不能删除(gerrit禁止删除了,如果不禁止,则push –mirror时其权限信息就丢失了)。

迁移所需权限:
Reference:
refs/*
Push Annotated Tag
Push Signed Tag
Forge Committer Identity
Create Reference
Read
Push

Leave a Reply

Your email address will not be published.