美文网首页
如何把SVN迁移到Gitlab

如何把SVN迁移到Gitlab

作者: weaiken | 来源:发表于2020-03-12 13:50 被阅读0次

    趁着之前做了有关SVN 迁移到 gitlab的相关经验,也参考了其他人的经验。现在总结一下:

    把SVN上的代码仓库迁移到Gitlab上,实际上就是把SVN仓库转变成Git仓库,并且希望能保留原SVN仓库的Commit等历史记录,这一点很重要。

    先确保之前有git-svn的环境,mac 是有自带的环境。

    # yum install -y git-svn
    

    保留原SVN仓库的Commit等历史记录,需要获取到SVN使用的作者名字列表,为了获得 SVN 使用的作者名字列表,可以在checkout到本地的仓库路径下运行这个:

    # svn co --username weaiken --password 123456 http://my-project.googlecode.com/svn/  code
    # cd code
    # svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /root/users.txt
    

    这会将日志输出为 XML 格式,然后保留作者信息行、去除重复、去除 XML 标记。 然后,将输出重定向到你的 users.txt 文件中,这样就可以在每一个记录后面加入对应的 Git 用户数据,修改users.txt文件满足以下的格式:

    # vim /root/users.txt
    schacon = schacon <schacon@geemail.com>
    selse =  selse <selse@geemail.com>
    

    然后开始把SVN仓库转变成Git仓库,执行以下命令:

    # git svn clone http://my-project.googlecode.com/svn/   --authors-file=/root/users.txt  --no-metadata  --stdlayout  --username=xxx   my_project 
    

    --stdlayout 这个参数比较关键:意思是按照svn 的默认项目结构进行拉取
    比如svn 包含tags , branches , trunk 目录。
    具体命令参数可以参考这个网页:

    https://git-scm.com/docs/git-svn
    

    如果拉取过程中因为svn 项目太大了或者异常中断了。可以进行命令恢复

     git svn fetch -r1948188:HEAD  //r1948188 是最新拉取的版本号,接上断开的位置即可
    

    为了将标签变为合适的 Git 标签,运行

    # cd  my_project
    # cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
    # rm -Rf .git/refs/remotes/origin/tags
    

    这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。

    接下来,将 refs/remotes 下剩余的引用移动为本地分支:

    # cp -Rf .git/refs/remotes/* .git/refs/heads/
    # rm -Rf .git/refs/remotes
    

    现在所有的旧分支都是真正的 Git 分支,并且所有的旧标签都是真正的 Git 标签。 最后一件要做的事情是,将你的新 Git 服务器添加为远程仓库并推送到上面。 下面是一个将你的服务器添加为远程仓库的例子:

    git remote add origin git@my-git-server:myrepository.git
    

    因为想要上传所有分支与标签,你现在可以运行:

    $ git push origin --all
    

    通过以上漂亮、干净地导入操作,你的所有分支与标签都应该在新 Git 服务器上,你可以去gitlab上查看结果了。

    文章部分有参考别人文章,但别人文章存在有坑的情况。所以我这边进行经验汇总记录。

    相关文章

      网友评论

          本文标题:如何把SVN迁移到Gitlab

          本文链接:https://www.haomeiwen.com/subject/heeujhtx.html