使用subgit转移svn库到GIT
--------------------------------------------------------------------
最近真正用上了git,发现比svn好用多了,于是注册了oschina的私有git仓库,把旧工作从svn向git迁移。
搜索了一下,虽然git 带着git svn这么个工具,但感觉 subgit这个工具视乎更受好评,于是选了subgit。
1:subgit的默认操作,
subgit configure --svn-url file:///e:/svn/cncdb/ e:/svn/cncgit
subgit install e:/svn/cncgit
然后再GITBASH里执行
git clone /E/SVN/cncgit /E/SVN/cncw
其中E:/SVN/CNCGIT是新的GIT仓库;E:/SVN/CNCW是git本地工作目录
2:处理svn里的非标准目录 和用户转换
在subgit configure 后,先别急于执行install,到 e:/svn/cncgit/subgit/目录下,编辑config文件
把主干,分支 标签几个SVN里的目录填写好。比如我下面的例子,这几个目录名都不是SVN推荐的标准名字。
注意根据config文件的提示shelves是用来“to represent anonymous Git branches”,不能省,否则会出错。
trunk = trunk:refs/heads/master
branches = branch/*:refs/heads/*
tags = tag/*:refs/tags/*
shelves = shelves/*:refs/shelves/*
如果你像我一样,用SVN时还傻傻的设立了这几个以外的目录,这个设定是不会给你转换成GIT的。我理解它
把其他目录看作是别的project代码库去了。
我想到的方法是在svn里先把这些目录都移动到branches的目录下,不过这样只能保留这个文件夹里的文件,
以前的历史是全丢掉了,还好那些本来都是测试性质的工作,后来都合并会几个主要的分支中了,损失也不算大。
关于用户名映射,git/subgit/目录下有个autors.txt文件,按格式填写名字映射即可。config文件里还有个
defaultDomain参数,可以生成默认的email地址后缀。
3 推送到网上服务器oschina.git
git remote add -f oschina
由于OSCHINA的项目需要在网站上先建立好,添加了ignore文件,这里要把这个项目init的变更先拉下来。
git fetch oschina
然后这里到了一个比较麻烦的地方,clone到/E/SVN/cncw只有master分支,推送到oschina上也只有master分支了。
我想到的办法是把所有分支都checkou 一次到本地来;
先用git branch -a>>list.txt得到所有分支的列表,然后替换成如下的命令列表,做成bat文件
git checkout branch branch1
git checkout branch branch2
......
执行一次这个BAT,把所有分支checkout一次到本地。
然后执行最后的push
git push oschina --all
git push oschina --tags
这样就把svn数据库所有的版本数据倒腾到了oschia的git库。
刚开始使用svn时连标准目录都没创建对,导致了今天的一大堆麻烦事。
---------------------------------------------------------------
后来另外又测试了一下git附带的git svn 工具,发现window版本不能工作,因为git svn自带的svn版本比较旧。
于是把svn库直接拷贝到ubuntu 14下,linux下的git svn就能正常的clone出svn的数据了。
我同样需要用指定几个文件夹的名称:
git svn clone -T trunk -b branch -t tag /mnt/E/SVN/cncdb /home/yang/cnc
效果看来和subgit查不多,该有的都有了,不同的是git svn 把其他所有目录都clone出来了,但是从版本树图看却混
杂在主线版本中。似乎还不如别clone出来的好。
-------------------------------------------------------------------------------------------------------
以上是我边查边学边操作的结果,读者找到更好的方法的话请不吝分享告知。
阅读(3598) | 评论(0) | 转发(0) |