从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】

从SVN迁移到git有很多方法,最简单的就是使用git包自带的git svn命令(git v1.7及以上)。除此之外还有一些第三方的专门的转换工具如http://www.subgit.com/,https://www.atlassian.com/git/tutorials/migrating-overview/等。但是由于是第三方工具,感觉能不用就不用。


使用git svn命令最经典的就是

$git svn clone --stdlayout --no-metadata -A users.txt svn://hostname/path dest_dir


其中:

--stdlayout就是说你使用的是标准的"trunk/, branches/, tags/" 等标记;

 --no-metadata命令是为了不要svn的额外的commit信息(UUID),一般也不需要,所以都带这个参数;

users.txt是把SVN的用户转成git用户的文件,这个文件可以用SVN的命令生成(如果用户很少自己写也可以),文件的形式如下:

svn_user1 = git_user1 < git_user1_mail@xxx.com>
svn_user2 = git_user2 < git_user2_mail@xxx.com>

每行一个user,等号左边是SVN的用户(区分大小写),等号右边就是git的用户,git的用户必须存在用户名和邮箱。如果用户比较多,可以使用下命令创建:

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt

然后编辑user.txt为上面的格式。


后面的url就是你的SVN checkout的url,支持的协议有SVN://,http://,https://,(如果你是做的本地服务器用的file:///形式的,有时候是不行的)

dest_dir就是目标git目录了。


这个命令一般都是没问题的。但是就如上面所说,如果SVN是本地服务器有时候就不行了,要么报错,要么只生成一个空的git容器。

其实这个命令是一个合成版本,可以使用它的拆分版,即:

$mkdir dest_dir && cd dest_dir
$git svn init file:///xxxxx/xxxx/xxxx --no-metadata
$git config svn.authorsfile ../users.txt
$git svn fetch
参数和git svn clone是一样的,其实就是git svn的分解版。


如果你的SVN没有其他的branch,到这里就完了。如果有其他的branch,还需要手动创建git的branch迁移。


然后就可以把刚才的git push到远程服务器,当然,只在本地用也是可以commit的,不影响使用。(这是git和svn的一个很大的区别)


参考资料:http://stackoverflow.com/questions/79165/how-to-migrate-svn-repository-with-history-to-a-new-git-repository

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值