SVN迁移至GitLab时分支映射与本地分支配置问题求助
SVN迁移至GitLab时分支映射与本地分支配置问题求助
我之前迁移SVN到GitLab的时候,完完全全踩过一模一样的坑!git svn clone默认就是会把SVN的目录结构转成Git的远程引用,不会自动帮你映射成标准的master分支和本地分支,手动几步就能调整好,我给你捋一遍具体操作:
1. 把SVN Trunk映射为Git Master分支
先确认一下当前的远程引用情况,输入命令:
git branch -a
你应该能看到类似 remotes/origin/trunk(或者remotes/trunk,取决于你克隆时的参数)、remotes/origin/branches/你的目标分支名 这样的条目。
接下来调整master分支:
- 先切换到SVN Trunk对应的远程引用:
git checkout remotes/origin/trunk - 把本地master分支强制指向当前提交(刚克隆的话master可能是空的或者指向初始提交,这个操作不会丢数据):
git branch -f master HEAD - 切回master分支:
git checkout master
这时候你的master分支就和原来的SVN Trunk完全同步了。
2. 把指定SVN分支转成本地Git分支
针对你需要迁移的那个特定SVN分支(比如叫feature-v2),直接基于远程引用创建本地分支:
git checkout -b feature-v2 remotes/origin/branches/feature-v2
执行完后输入git branch,就能看到本地已经有master和feature-v2两个分支了,完全是Git标准的本地分支结构。
3. 清理无用的SVN远程引用
现在你需要的分支都转成本地的了,那些remotes/origin/xxx的引用就没用了,可以清理掉避免混淆:
- 先移除git-svn自动创建的远程仓库(这里的
origin是SVN对应的远程,不是GitLab的):git remote remove origin - 或者如果你想逐个删除远程分支引用,也可以用:
git branch -d -r origin/trunk origin/branches/feature-v2
4. 推送到GitLab仓库
最后把本地分支推到GitLab就行:
- 先添加GitLab的远程仓库地址(换成你自己的GitLab仓库地址):
git remote add gitlab git@gitlab.com:你的用户名/你的项目名.git - 推送所有本地分支:
git push gitlab --all
如果SVN里有标签需要迁移,也可以加上:
git push gitlab --tags
一些小提醒
- 如果你克隆SVN的时候没加
--stdlayout参数,远程引用的路径可能会不一样(比如直接是remotes/trunk而不是remotes/origin/trunk),这时候命令里的路径要对应调整 - 操作前最好把本地仓库复制一份备份,万一误操作也能快速恢复
- 如果迁移过程中SVN还有新提交,记得先执行
git svn fetch拉取最新内容,再做分支映射的操作
我当时就是这么一步步操作的,最后推到GitLab后分支结构完全符合预期,你试试看有什么问题随时说!




