那时候刚好下着雨,柏油路面湿冷冷的,还闪烁着青、黄、红颜色的灯火。



使用subgit将代码库从SVN迁移git


使用subgit将代码库从SVN迁至git

hello,好久没有写过技术博客了,前段时间也算是忙得差不多了,终于可以在咖啡馆坐下来写点东西了,感觉好怀念啊 哈哈。

今年上半年,部门新来了两个架构师,然后搭建了一个gitlab平台,并且已经有部分项目从svn迁移至了git。然后出于种种原来,我组也开始尝试把项目迁至gitlab上,然后我负责的这个项目再一次被我成为了实验品,哈哈上次从php5.3升级至php5.5也是。或许我总是有这种“敢为天下先”的心态,其实也不仅仅是这两次,其中还有很多。比如,在项目使用compoer包管理,项目使用 doctrine ORM 等等一些尝鲜的行为,虽然有坑,自己还是慢慢的把它全填完了,给自己一点掌声...既然已经迁移成功,那今天就写一篇关于这个的文档吧。

迁移

本方法只适用于从svn迁至gitlab库中,其实需要用到一些工具,如果我有没讲明白或哪里讲错的可以在下方留言或自行Google。当然一切的前提是你已经把git服务器搭建好或gitlab环境搭建好,关于搭建这东西,暂时还没有试过,有机会我也会尝试尝试。

步骤零

Gitlab

  • 登陆内部GitLab网站 GitLab
  • 创建组并把开发人员添加至所创建的组中。
  • 进入所创建的组,并创建所需要团队开发的项目,项目名称尽量以com-lattecake-image,鳖问为什么,照做就是了。
  • 在你所要开发或迁移的机器上生成连接git的ssh keys 在终端执行命令:

    // 生成 public key
    /~ ssh-keygen -t rsa -C "i@lattecake.com"
        
    // 查看所生成的 key
    ~/ cat ~/.ssh/id_rsa.pub
    

    把所生成的key复制并添加至git上,gitlab的在这里 /项目/setting/DeployKeys,具体怎么操作就不用多讲了吧,用过github或其他git版本库的应该都会操作

如果是个人项目的话,可以直接创新项目而不需要先创建组,创建的方式与上面一至

详细的gitlab操作后续如果有时间的话我再补充,当然本章所讲的全部都是以gitlab的操作进行讲解的,当然也可以通过命令行完成一些操作。

步骤一

如果需要把所有的提交记录也都迁移至git上的话需要用到以下工具及相应的方法,如果不需要请跳过本章,直接创建新项目然后把代码copy过去就好了。

当然如果自己不嫌麻烦的话可以自己尝试使用git-svn命令手动自己一点一点的迁移至git,这个过程非常的麻烦并且消耗时间,并不推荐这样使用,我也尝试过好几个小时也没搞定。git-svn需要安装扩展...

工具

  • 先从官网下载 subgit 工具
  • 解压 subgit 工具包

    解压完后进行subgit-3.x.x目录会看到以下文件

        ~/subgit-3.0.0/
            bin/
                subgit
            CHANGES.txt
            KNOWN_ISSUES.txt
            lib/
                    
            LICENSE.txt
            README.txt
                
    

步骤二

以下方式可以在Mac的OS X系统上进行也可以在linux系统上完成,我是在linux系统完成这些操作的。

  1. cd ~ 进入用户目录,为了不让自己的home目录看起来那么乱,我决定创建 my_repository 目录并进入
  2. 执行以下命令可以导出svn上的主干代码及所有commint记录,注意只是 /trunk 上的代码 /branchs/tags上的代码并不会导出,所以做这个之前请先保证所有分支上的代码都已经合并到主支上去了。(不听话的孩子出问题了鳖找我)

    ~/subgit-3.0.0/bin/subgit import --non-interactive --svn-url https://你家的svn地址/你的项目 ./lattecake.git
    

    等上面命令执行完成后已经成功了一大半了,注意,如果项目提交数多的话等待的时间将会非常长。

  3. 这时我们需要进行一些配制,进入 lattecake.git/subgit/ 目录我们需要修改一些文件

    • 修改 authors.txt 文件

      这里写上Svn用户与Gitlab用户的对应关系,这个文件保存的是svn用户与git用户的对应关系,如果不设置的话,svn的提交记录将无法与git用户一一对应起来,当然这也不是特别重要,如果你不在意前面的提交记录的话。当然不加这个的话也不会影响后面流程。

      // lattecake.git/subgit/authors.txt
      superCong = superCong<i@lattecake.com>
              
      
    • 修改 passwd 文件

      这里写上SVN用户对应的密码,其实这个可有可无,如果svn之前已经在本系统登陆过的话可以不填写。

      // yrdsales.git/subgit/passwd
      subgit secret
      {用户名} {密码}
      
  4. clone lattecake.gitcom-lattecake-image.git

    git clone ./lattecake.git/ com-lattecake-image.git
    

    上面只是的clone还只是克隆到了本地,此时远程的git库上还看不到这些东西,我们需要把这些提交至远程库中,具体的咱们接着往下看。

  5. 进入 com-lattecake-image.git/ 目录执行以下命令增加至版本库

    git remote set-url origin git@about.gitlab.com):superCong/com-lattecake-image.git
    

    通过上面命令把本地的版本库提交至远程库中

  6. 合并提交至master

    git push origin master
    

    能干以上命令把代码合并至master主干上,这样咱们就可以登陆gitlab上看到刚刚咱们所创建的项目里的代码了。

登陆Gitlab网站查看项目,应该有所有的commit记录,master就是原来svn的 trunk 代码。

使用

请关注后续更新


 标签 , TAG , 啦啦