Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188465
  • 博文数量: 79
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-25 14:40
文章分类
文章存档

2015年(1)

2014年(1)

2013年(2)

2012年(1)

2011年(5)

2010年(2)

2009年(6)

2008年(20)

2007年(27)

2006年(14)

我的朋友

分类: 项目管理

2015-02-12 16:34:24

使用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) |
1

上一篇:制作BeagleBoneBlack的ubuntu系统

下一篇:没有了

给主人留下些什么吧!~~