最近公司要求将代码库从svn迁移到gitlab,由于之前一直是由svn做版本控制。最简单的方式是将svn的内容export出来,然后添加到gitlab即可。但是,如果svn用的时间很长了,而且很多commit,所以就希望保存svn commit的信息以便做版本的控制和比较以及后期项目的维护。摸索了一天,查看gitlab官方提供的文档中两个方法讲的都比较模糊,最后在git上找到了解决的方法。
前提:
已安装git
已安装gitlab
迁移
1、环境准备
sudo apt-get install git-svn
2、创建用户映射
在 Subversion,每个提交者在都在主机上有一个用户名,记录在提交信息中. 比如 blame 的输出以及 git svn log。如果想让这条信息更好的映射到 Git 作者数据里,则需要从 SVN 用户名到 Git 作者的一个映射关系建立一个叫做 user.txt 的文件,用如下格式表示映射关系:
zhangsan = zhangsan <zhangsan@gmail.com>
lisi = lisi <lisi@gmail.com>
wangwu = wangwu <wangwu@gmail.com>
在svn库下执行该命令可以在当前文件夹生成users.txt,获得 SVN 作者的列表:
svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
根据svn帐号与git帐号的映射,补充users.txt为上述格式。
3、获取SVN的仓库到本地
通过 git svn clone 命令可以把整个 SVN 仓库导入到一个本地的 git 仓库中, 但这样导入的代码提交历史很糟糕, 需要做一些处理. 在 clone 后面添加 –no-metadata 来阻止 git svn 包含那些 SVN 的附加信息。同时为了获得更精确的提交者 ID 和邮箱, 添加 –authors-file 参数
git svn clone svn://ip端口/projectname --no-metadata --authors-file=users.txt projectname
cd projectname
4、在GitLab上创建Git仓库
为 GitLab 上为 SVN 仓库创建对应的 Git 仓库,会生成如下的仓库地址:
git@gitlab.com:<group>/<projectname>.git
5、添加远程git仓库
在本地,将上面创建的仓库服务器添加为远程服务器并且向它推送。下面是新增远程服务器的例子:
git remote add origin git@gitlab.com:<group>/<projectname>.git
6、 提交代码到git仓库
通过以下命令将本地代码提交到远程git仓库:
git push -u origin master
参考资料:
http://gitlab.deepano.com/help/workflow/importing/migrating_from_svn
https://www.zybuluo.com/Jazka/note/173956
https://www.bbsmax.com/A/lk5alv0NJ1/