您的位置:首页 > 其它

svn迁移到git仓库的方案

2017-12-29 13:01 351 查看
svn迁移到git仓库并保留commit历史记录

最近公司要求将代码库从svn迁移到gitlab,由于之前一直是由svn做版本控制。最简单的方式是将svn的内容export出来,然后添加到gitlab即可。但是,如果svn用的时间很长了,而且很多commit,所以就希望保存svn commit的信息以便做版本的控制和比较以及后期项目的维护。摸索了一天,查看gitlab官方提供的文档中两个方法讲的都比较模糊,最后在git上找到了解决的方法。

前提: 

已安装git 

已安装gitlab

迁移 

1、环境准备
sudo apt-get install git-svn
1

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>
1
2
3

在svn库下执行该命令可以在当前文件夹生成users.txt,获得 SVN 作者的列表:
svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
1

根据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
1
2

4、在GitLab上创建Git仓库 

为 GitLab 上为 SVN 仓库创建对应的 Git 仓库,会生成如下的仓库地址:
git@gitlab.com:<group>/<projectname>.git
1

5、添加远程git仓库

在本地,将上面创建的仓库服务器添加为远程服务器并且向它推送。下面是新增远程服务器的例子:
git remote add origin git@gitlab.com:<group>/<projectname>.git
1

6、 提交代码到git仓库

通过以下命令将本地代码提交到远程git仓库:
git push -u origin master
1

参考资料: 
http://gitlab.deepano.com/help/workflow/importing/migrating_from_svn 
https://www.zybuluo.com/Jazka/note/173956 
https://www.bbsmax.com/A/lk5alv0NJ1/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: