SVN转Git(Gerrit)迁移:如何将SVN分支导入已迁移的Gerrit项目
Hey,我之前刚好处理过类似的SVN多分支迁移到Gerrit的需求,给你整理了两种实用的方法,结合你的场景(已经完成主干迁移并接入Gerrit),你可以根据自己的情况选:
方法一:基于已有的git-svn本地仓库迁移分支(保留完整历史)
如果你的本地还保留着当初迁移时用的git-svn仓库(能和SVN远程同步),这种方法能完整保留SVN分支的提交历史:
- 先更新SVN的分支列表,确保能获取到所有最新的分支信息:
git svn fetch - 列出所有SVN分支,确认你要迁移的目标分支(比如
branches/v1.0):git svn branches - 将目标SVN分支拉取到本地临时分支:
git svn checkout branches/v1.0 local-v1.0-branch - 切换到你已关联Gerrit的本地Git仓库,把刚才拉取的分支同步过来并推送到Gerrit:
# 添加临时分支仓库为远程源 git remote add svn-branch-temp /path/to/your/local-v1.0-branch-repo git fetch svn-branch-temp # 创建本地分支对应SVN分支 git checkout -b v1.0 svn-branch-temp/master # 推送到Gerrit,注意Gerrit的分支推送格式为refs/heads/[分支名] git push origin v1.0:refs/heads/v1.0
方法二:直接从SVN导出分支导入(快速迁移,无历史)
如果不需要保留SVN分支的提交历史,或者已经没有git-svn关联的本地仓库,可以用这种快速方法:
- 先把目标SVN分支导出到本地目录:
svn export https://your-svn-repo-url/branches/v1.0 svn-v1.0-export - 切换到你关联Gerrit的本地Git仓库,创建一个空的新分支:
git checkout --orphan v1.0 git rm -rf . - 将SVN导出的文件复制到当前分支目录,提交并推送到Gerrit:
cp -r /path/to/svn-v1.0-export/* . git add . git commit -m "Migrate SVN branch v1.0 to Gerrit" git push origin v1.0:refs/heads/v1.0
必看注意事项
- 权限检查:推送前一定要确认你在Gerrit项目中有
Create Reference的权限,不然会被拒绝。权限可以联系项目管理员在Gerrit的「项目设置 -> Access -> References -> refs/heads/*」中配置。 - 历史优先级:如果需要保留分支的完整提交历史,优先用方法一,方法二会丢失所有SVN提交记录,只适合临时分支或不需要历史的场景。
- 分支命名:尽量和SVN原分支名保持一致,或者遵循Gerrit项目已有的分支规范,避免后续管理混乱。
- 冲突处理:如果Gerrit中已有同名分支,先确认是否需要合并现有内容,或者重命名后再推送,防止覆盖重要代码。
内容的提问来源于stack exchange,提问作者Jomark
相关产品推荐
相关产品推荐

