如何确定非标准SVN仓库布局以完成向Git的迁移?
非标准布局SVN转Git迁移指南
先定位主干代码
既然statmod是内容最丰富的目录,先确认它是不是实际的主干:
执行这条命令查看提交记录的集中方向:
svn log -v http://你的SVN仓库地址 | grep statmod | head -20
如果大部分提交都指向statmod,那它就对应Git的trunk。
识别分支和标签
扫一遍SVN根目录和statmod子目录,找带版本号、feature前缀的文件夹(比如statmod_v2.1、statmod_pay_feature)。然后用日志判断属性:
svn log -v http://你的SVN仓库地址/疑似分支的文件夹
- 拷贝后有持续提交的是分支;
- 拷贝后没再更新的是标签。
用自定义映射执行git svn clone
确定对应关系后,直接在命令行指定布局参数。比如statmod是trunk,根目录下的legacy_versions是分支,statmod_releases是标签:
git svn clone --trunk=statmod --branches=legacy_versions --tags=statmod_releases http://你的SVN仓库地址
要是分支/标签命名有规律(比如都带_branch/_tag后缀),可以用通配符批量匹配:
git svn clone --trunk=statmod --branches=*_branch --tags=*_tag http://你的SVN仓库地址
验证迁移结果
克隆完成后,检查分支、标签和提交历史:
git branch -a # 列出所有分支 git tag -l # 列出所有标签 git log --oneline # 快速浏览提交历史是否完整
如果历史缺漏,调整映射参数重新克隆就行。
特殊情况处理
如果SVN里没有明确的分支/标签目录,只有多个平行的项目文件夹,要么把每个文件夹单独转成Git仓库,要么先git svn init本地仓库,手动编辑.git/config里的svn布局配置,再git svn fetch拉取历史。
内容的提问来源于stack exchange,提问作者Tallands
相关产品推荐
相关产品推荐

