最新消息:

svn迁移到git仓库并保留commit历史记录

git admin 3908浏览 0评论

最近公司要求将代码库从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/

转载请注明:爱开源 » svn迁移到git仓库并保留commit历史记录

您必须 登录 才能发表评论!