SVN迁移到Git的过程(+ 一些技巧)
来源:岁月联盟
时间:2012-01-17
SVN,Git,Clone,Conversion,Tips,VCS,Pro Git
关于在VCS中SVN和Git之间的迁移(Clone)这个部分网上已经有大批的文章介绍,而且都非常不错,能够满足我们的常见的需求,这里介绍的是我自己整理的一些技巧和使用中出现的一些问题和疑问。
阅读本篇文章,请先有一些Git和SVN的使用经验(又是经验,经验到底是什么?我都不知道)。
第一部分
今天的实验对象是,把http://code.google.com/p/jdbcdslog-exp/ 这个使用SVN管理的project迁移到Git上面,Git托管网站选择github。SVN迁移到Git,当然要清楚git svn 命令了。
首先请在github上面创建一个repository,这个简单,就不说了,然后就是使用强大的git了。
$ git svn init https://jdbcdslog-exp.googlecode.com/svn/ -s
$ git svn fetch
当然上面的两步,可以作一步处理
$ git svn clone https://jdbcdslog-exp.googlecode.com/svn/ -s
注:-s 参数是表面使用的是svn标准命名方法,即trunk,tags,branches,这个参数有时很重要,建议使用,命令后面还可以加个文件夹名字作为clone后的目录,如果没有默认是当前路径。
git svn fetch 这个步骤,可能碰到只想从某个版本开始进行fetch,那么请需要–r 参数。
例如:
$ git svn fetch -r 1342:HEAD
注:1342是你想要从这个版本开始fetch,如何查看这个版本号,你可以使用svn 命令(windows下需要安装Subversion Client,e.g. sliksvn),简单使用就是svn log svn_url ,这个时候,你可能看到整屏在刷新,没关系,看到log就行。当然更简单的就是使用TortoiseSVN-> Show log。
亦或者你可以这样使用:
$ git svn clone https://jdbcdslog-exp.googlecode.com/svn/ -sr 1342:HEAD jdbcdslog-exp
到这步的时候,本地已经clone了SVN仓库,现在需要的就是提交到远程了。首先,关联github远程仓库,如下:
$ git remote add origin git@github.com:usc/jdbcdslog-exp.git
普通青年这个时候,肯定就会选择使用
$ git push -u origin master
到github上面查看这个仓库(repository),大致效果如下(https://github.com/usc/jdbcdslog-exp)
二逼青年当然要看看文档或者仓库信息,有没有什么值得注意的,你瞧瞧,出现了很多branches,并没有tag(SVN仓库目录是标准目录,其中tags下有几个版本的代码,而branches下是没有代码的),是不是很奇怪(上图实际上也说明了一些问题,只有一个branches),既然出现了这样,就要想办法解决了。
问题的解决直接来自《Pro Git》电子书,下面一段copy自《Pro Git》。
【引用开始】
你还需要一点post-import(导入后)清理工作。最起码的,应该清理一下git svn 创
建的那些怪异的索引结构。首先要移动标签,把它们从奇怪的远程分支变成实际的标签,然
后把剩下的分支移动到本地。
要把标签变成合适的Git 标签,运行