1 | 作者:JensenWong |
把SVN上的代码仓库迁移到Gitlab上,实际上就是把SVN仓库转变成Git仓库,并且希望能保留原SVN仓库的Commit等历史记录,这一点很重要。
SVN迁移到Gitlab需要安装git-svn
1 | # yum install -y git-svn |
保留原SVN仓库的Commit等历史记录,需要获取到SVN使用的作者名字列表,为了获得 SVN 使用的作者名字列表,可以在checkout到本地的仓库路径下运行这个:
1 | # svn co --username tom --password 123456 http://my-project.googlecode.com/svn/ code |
这会将日志输出为 XML 格式,然后保留作者信息行、去除重复、去除 XML 标记。 然后,将输出重定向到你的 users.txt 文件中,这样就可以在每一个记录后面加入对应的 Git 用户数据,修改users.txt文件满足以下的格式:
1 | # vim /root/users.txt |
然后开始把SVN仓库转变成Git仓库,执行以下命令:
1 | # git svn clone http://my-project.googlecode.com/svn/ --authors-file=/root/users.txt --no-metadata my_project |
为了将标签变为合适的 Git 标签,运行
1 | # cd my_project |
这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签。
接下来,将 refs/remotes 下剩余的引用移动为本地分支:
1 | # cp -Rf .git/refs/remotes/* .git/refs/heads/ |
现在所有的旧分支都是真正的 Git 分支,并且所有的旧标签都是真正的 Git 标签。 最后一件要做的事情是,将你的新 Git 服务器添加为远程仓库并推送到上面。 下面是一个将你的服务器添加为远程仓库的例子:
1 | # git remote add origin git@my-git-server:myrepository.git |
因为想要上传所有分支与标签,你现在可以运行:
1 | $ git push origin --all |
通过以上漂亮、干净地导入操作,你的所有分支与标签都应该在新 Git 服务器上,你可以去gitlab上查看结果了。
参考资料: https://blog.csdn.net/ouyang_peng/article/category/1590137