svn迁移到gitlab

Prerequisites:本机安装git 客户端

迁移:

  1. 安装好git客户端,在指定文件夹下,右键,Git bash here进入git bash

           

         2. 建立users.txt(存储svn账号与gitlab上账号的关联性)

           格式: svn用户名 = git用户名,如:

           注意: svn里面有的账号必须要做关联,否则clone会失败。比如上面的user11找不到是哪个开发人员,也不知道它该对应哪个git账号,那就随便指定一个git账号就行了,这样做的目的其实就是将user11在svn里面的所有提交日志  关联到yqdong的git账号下。转到git之后,原svn账号就无关紧要,各司其职了。

           绑定 users.txt 的意义仅在于,将svn里面的提交者日志,注意是提交者,不是svn里面所有的用户信息都得关联,仅仅是往项目提交过代码的svn账号,将这些svn账号找出来,然后关联到现有的git账号,一旦转到git上之后,每个git用户就能看到自己过去在svn里面提交的日志,绕了这么大一圈,现在明白了吧?

          可以通过以下命令快速创建 users.txt

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

注:URL是要迁移的svn项目地址
       

    3. 导出svn上的项目数据

  • git svn clone URL --trunk="trunk" --tags="tags" --branches="branches" --authors-file=./users.txt --no-metadata 

    注:URL是要迁移的svn项目地址  

  • 注:--trunk --tags --branches参数当且仅当要迁移项目有这些分支才添加。

        4. 添加GitLab到Git源信息

git remote add origin URL

注:目的地gitlab仓库地址

       5. 将trunk, branches等上传

git push origin --all

svn迁移gitlab(二)

当svn仓库里有tag、branch时,会发现照着上面迁移gitlab上面是没有tag、branch,故迁移失败。研究发现在第3步导出svn上的项目之后,需要一点post-import(导入后) 清理工作。最起码的,应该清理一下git svn 创

建的那些怪异的索引结构。首先要移动标签,把它们从奇怪的远程分支变成实际的标签,然后把剩下的分支移动到本地。

  • 要把标签变成合适的Git 标签,运行(选,如果有tag则执行)
    $ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
    $ rm -Rf .git/refs/remotes/tags

    该命令将原本以tag/ 开头的远程分支的索引变成真正的(轻巧的)标签。

 

  • 把refs/remotes 下面剩下的索引变成本地分支  
    $ cp -Rf .git/refs/remotes/* .git/refs/heads/
    $ rm -Rf .git/refs/remotes

     

 

          现在所有的旧分支都变成真正的Git 分支,所有的旧标签也变成真正的Git 标签

posted @ 2019-01-29 10:16  vwater  阅读(5952)  评论(0编辑  收藏  举报