svn迁移到gitlab

背景

公司内部新搭建了gitlab代码仓库,决定把原来SVN上的项目迁移到gitlab上,同时需要保留每个账户在SVN上的提交记录。我的迁移是在macOS上完成的。

迁移步骤

###1.安装git-svn工具

centos系统可以使用下面的命令安装:

1
yum install -y git-svn

macOS系统原来已经安装过git,可以直接使用git svn命令

###2.获取SVN提交用户名

建立users文件来保存SVN和gitlab账号直接的关联,格式为svn用户名 = gitlab用户名,如:

1
2
san.zhang = san.zhang <san.zhang@xxx.com>
si.li = si.li <si.li@xxx.com>

cd到待迁移项目的根目录执行下面的命令可以快速生成users:

1
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2"@xxx.com>"}' | sort -u > users

说明: `@xxx.com`后缀可以换成自己公司内部邮箱后缀

3.检出svn项目到本地

把svn项目trunk下的文件和文件夹先检出到本地的一个目录(目录名字可以随便取,例如 projectToGitlab),如果需要迁移其他分支的代码,可以把trunk改成分支名字。

1
git svn clone  https://svn.xxx.com/svn/projectName/trunk projectToGitlab  --no-metadata  --authors-file=users

4.添加远程gitlab库

先在gitlab上创建相应的工程,设置好相关权限,使用git remote命令添加远程服务器:

1
2
cd projectToGitlab
git remote add origin http://git.xxx.com/department/projectName.git

说明http://git.xxx.com/department/projectName.git 是项目的gitlab地址,通过http协议访问

5.上传代码到gitlab

1
git push origin master

至此就完成了从 SVN 到 GitLab 的迁移,并且是包含了 SVN 提交记录的。