兴趣部落的 Git 迁移实践

​由于历史缘由,刚进小组时,组内主要利用 SVN 做为兴趣部落的代码托管工具,最近组里从新定义了一套代码 Review 规范,而 SVN 不能知足咱们的需求,再加上公司的 Git 平台已经成熟可用,咱们便萌生了将兴趣部落的代码从 SVN 迁移到 Git 上的念头。通过几天的努力,如今代码已迁移完成,下面就把过程与总结写下来供你们参考。git

方法1

​先介绍一个简单粗暴的方法,TortoiseSVN 有自带的 Export 功能,能够将 SVN 的代码所有导出到一个新的文件夹下。下面简单描述下步骤,以 Github 为例。bash

​先在 Github 上建一个 repository,并将之 clone 到本地,假设文件夹叫 A。而后找到你要迁移的 SVN 项目,右击选择 TortoiseSVN -> Export,选择 A 文件夹,肯定后 SVN 项目中的代码便到了 A 文件夹中,下面就能够将这个项目当作通常的 Git 项目来对待了。svn

​说这个方法简单粗暴,是由于这个方法其实跟将整个 SVN 项目的代码直接复制粘贴到 Git 项目文件夹下没多大差异,而且此次到 Github 上的提交会被当成整个项目的第一次提交,也就是之前的提交记录没有被迁移过来。工具

方法2

​若是你想作的完美一点,不只迁移代码,还要迁移之前的提交记录,那应该怎么作呢?那就要用到 git-svn 了,详细文档请参考:git-svnurl

​使用 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 参数。

​总体来看,迁移过程很顺利,没有很复杂的步骤。若是你在迁移中有什么困惑,能够去官网上瞧瞧。

相关文章
相关标签/搜索