背景介绍
这里就不再赘述关于SVN与Git的区别以及为什么要迁移源码到Git了,毕竟Git是当前的主流DVCS了,而且已经公认地非常好用,如果你还在使用SVN的话该考虑换了,是时候迁移那些遗留代码了,有兴趣可以参阅 Why Git 和 Perforce to Git 了解更多。
通常来说,在项目开发过程中,难免会遇到一些老项目代码正被SVN管理着,但基于当下诸多原因,或是扩展开发,或是战略转移,或是为了更好地开发体验,需要将这些在维护的遗留项目源码迁移为Git管理。
那如何有效地迁移源码?并且如何保留提交记录、分支记录以及开发成员等信息呢?笔者前一段时间就经历了这样的迁移工作,还是有必要分享一下,也算是一种总结了。
准备工作
迁移SVN源码到Git仓库的方法肯定不是暴力地将代码Copy再Paste到Git仓库,也不是直接在项目下git init初始化仓库的,而是应该使用git svn命令操作实现迁移工作。那git-svn命令如何使用?有哪些注意事项呢?
首先,在正式开始迁移项目之前,需要做一些准备工作:
准备一台安装有最新Git环境的磁盘容量足的电脑
经获知Git仓库的远程地址,无论是自己创建还是团队提供
确保对Git远程仓库有读写权限,无论通过用户名密码还是SSH访问都行
准备一份开发者的SVN用户名到Git全名+邮件的映射关系列表文件authors.txt,格式为:
loginname = Username
1
loginname=Username
由于SVN对每次提交只记录开发者的用户名,而Git存储其全名和邮件地址,这意味着需要对开发者信息进行映射转换,在准备authors.txt文件时,可以到团队系统数据库直接查询开发者登录名、用户名和邮件地址并拼接成指定的格式,或者可下载Atlassian的工具包 svn-migration-scripts.jar (本地下载),通过命令拉取SVN仓库的用户并生成对应的开发者信息映射文件,需要Java运行时环境支持:
java -jar svn-migration-scripts.jar authors https://svn.example.com > authors.txt
1
java-jarsvn-migration-scripts.jarauthorshttps://svn.example.com>authors.txt
转换仓库
准备工作完成后可以开始实施转移仓库了,应该注意的是,在转移SVN项目时需要根据是否是标准的SVN文件布局来确定命令行的参数。(注:以下所有示意图均来自Atlassian)
标准的SVN文件布局
如果SVN仓库使用标准的了/trunk,/branches和/tags的目录结构,就可在运行命令时加上参数--stdlayout。
# Windows 下一般需要执行如下命令,否则会报告路径超长问题
# Windows 下需要手工安装Perl
git config --global core.longpaths true
git svn clone --stdlayout --authors-file=authors.txt /
git svn clone --stdlayout --authors-file