由于历史缘由,刚进小组时,组内主要利用 SVN 做为兴趣部落的代码托管工具,最近组里从新定义了一套代码 Review 规范,而 SVN 不能知足咱们的需求,再加上公司的 Git 平台已经成熟可用,咱们便萌生了将兴趣部落的代码从 SVN 迁移到 Git 上的念头。通过几天的努力,如今代码已迁移完成,下面就把过程与总结写下来供你们参考。git
先介绍一个简单粗暴的方法,TortoiseSVN 有自带的 Export 功能,能够将 SVN 的代码所有导出到一个新的文件夹下。下面简单描述下步骤,以 Github 为例。bash
先在 Github 上建一个 repository,并将之 clone 到本地,假设文件夹叫 A。而后找到你要迁移的 SVN 项目,右击选择 TortoiseSVN -> Export,选择 A 文件夹,肯定后 SVN 项目中的代码便到了 A 文件夹中,下面就能够将这个项目当作通常的 Git 项目来对待了。svn
说这个方法简单粗暴,是由于这个方法其实跟将整个 SVN 项目的代码直接复制粘贴到 Git 项目文件夹下没多大差异,而且此次到 Github 上的提交会被当成整个项目的第一次提交,也就是之前的提交记录没有被迁移过来。工具
若是你想作的完美一点,不只迁移代码,还要迁移之前的提交记录,那应该怎么作呢?那就要用到 git-svn 了,详细文档请参考:git-svn。url
使用 git svn clone your-svn-url your-target-folder
能够将 SVN 的主干代码以及提交记录拉取到了本地目标文件夹 your-target-folder 中。这种方式只能迁移一个特定文件夹的代码(通常迁移 trunk)。但若是你不只想迁移主干代码,还想将 branch 和 tag 的代码一并迁移,你可使用: git svn clone root-path --trunk="trunk/project" --branches=“branches” --tags="tags"
。须要注意的是,trunk、branches 以及 tags 的路径是相对的。若是你的项目很庞大而且有很长的历史,那么迁移过程将会很是漫长(以天为单位)。若是你迁移过程当中很幸运没碰见程序出错、电脑崩溃而最终成功的话,你能够执行 git branch -a
看看分支状况。由于咱们没有迁移 branch 和 tag,因此不了解有什么坑。spa
新的文件夹是没有 .gitignore
文件的,因此须要新建一个。code
当准备工做都作好后,下面能够将代码提交到远程仓库中:xml
git remote add origin your-git-repository git push -u origin master
若是 SVN 的帐号和 Git 的帐号名称不同,而且 SVN 中的帐户就是一个 ID,而 Git 中的帐号是 username 和 email,SVN 的 ID 能够和 Git 的 username 和 email 在迁移过程当中对应起来,具体作法以下:rem
// 在 SVN 项目根目录: svn log --xml | grep author | sort -u | perl -pe 's/.>(.?)<./$1 = /'
输出一列 SVN 用户列表,将之保存到 users.txt 中,而且修改帐号对应关系,格式以下:文档
zhangsan = 张三 <zhangsan@tencent.com> ... wangwu = 王五 <wangwu@tencent.com>
上面的 zhangsan
就是 SVN 的 ID,后面对应的就是 username 和 email。有了 users.txt 的帐号对应信息,下面能够迁移了:
git svn clone your-svn-url --authors-file=users.txt your-target-folder
也就是在迁移命令中加入 --authors-file
参数。
总体来看,迁移过程很顺利,没有很复杂的步骤。若是你在迁移中有什么困惑,能够去官网上瞧瞧。