将SVN上的代码迁移到GitLab上,实际原理是将所迁移的服务器上,拷贝SVN上的相关代码,在服务器上生成Git相关仓库,然后推送到GitLab仓库,并保存SVN相关的提交记录,分支,标签等信息。

一、安装git-svn

首先安装迁移所需要的工具git-svn,通过以下命令行进行安装。

apt-get install -y git-svn或者yum install -y git-svn

Git java svn 迁移 svn迁移到gitlab_git

 

Git java svn 迁移 svn迁移到gitlab_svn_02

 

我们在原来的svn教程基础上,用shaw001用户新增了testMeg.txt、commit-shaw001.txt文件,用shaw002用户新增了commit-shaw002.txt文件,并修改了两个文件,svn提交记录如图所示:

Git java svn 迁移 svn迁移到gitlab_git_03

二、生成用户映射文件

保留原SVN仓库的Commit等历史记录,需要获取到SVN使用的作者名字列表,为了获得 SVN 使用的作者名字列表,可以通过以下命令行,获取SVN相关用户信息:

svn co --username shaw001 --password shaw001 svn://192.168.109.128/  code

以上红色部分为可变变量,说明:

--username:后头跟svn用户名。

--password:后头跟svn用户相关密码

svn://192.168.109.128/:为SVN仓库地址

code:文件夹,存放SVN仓库相关文件夹

Git java svn 迁移 svn迁移到gitlab_git_04

 

执行命令后会将svn上的相关文件代码存放到code文件夹。进入code文件夹,可以看到,我们在svn存放的一些文件信息。

接着,通过以下命令,生成svn用户列表:

svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /home/svn/users.txt

红色部门为用户列表文件存放的路径。期间要输入svn的用户名和密码。

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_05

执行命令后我们在/home/svn路径下会多出一个users.txt的文件。

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_06

 

打开后,我们会看到里头有svn的用户。

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_07

 

三、修改用户列表,配置与GitLab用户映射关系

我们登陆到GitLab上,新建两个用户shaw001和shaw002,并且email设定为shaw001@example.com和shaw002@example.com

Git java svn 迁移 svn迁移到gitlab_txt文件_08

  

Git java svn 迁移 svn迁移到gitlab_git_09

  

修改users.txt文件,配置对应关系:

Git java svn 迁移 svn迁移到gitlab_svn_10

 

 格式如下:

svn用户 = GitLab用户<GitLab用户邮箱>

四、将svn仓库变成GitLab仓库

在服务器上拷贝svn代码并转成GitLab仓库。通过以下命令:

git svn clone svn://192.168.109.128/ --authors-file=/home/svn/users.txt  --no-metadata myproject

期间也是要输入svn密码的:

Git java svn 迁移 svn迁移到gitlab_txt文件_11

 

 执行完文件信息如下:

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_12

 

五、创建GitLab项目接收代码

在gitlab创建testsvn项目用来接收svn代码

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_13

 

执行分支添加:

git remote add origin git@192.168.109.128:shaw001/testsvn.git

然后推送到远端:

git push origin –all

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_14

 

有时候执行过程中会提示:无法推送一些引用到”xxx”

执行以下命令:

git push -u origin +master

Git java svn 迁移 svn迁移到gitlab_git_15

 

这时候要添加sshkey。这步骤省去,添加完后,重新执行下。这儿添加ssh key略去,添加SSH key之后重新执行:

Git java svn 迁移 svn迁移到gitlab_txt文件_16

 

登录gitlab查看下,相关的提交记录

Git java svn 迁移 svn迁移到gitlab_txt文件_17

 

文件已经同步了

 

Git java svn 迁移 svn迁移到gitlab_Git java svn 迁移_18

同时相关的提交记录也同步了。完成。

作者:shawWey

要相信所有的事情都会过去的,只是以什么样的方式,什么样的结果结束而已,保持平常心,做你该做的。