概述
公司要求将之前使用SVN进行管理的项目迁移到Gitlab进行项目管理,但是运维连不上我们这边的SVN服务器,于是我们就得自己将SVN项目迁移到Gitlab。Yeah!终于有我表现的机会了。
要求保留SVN上的提交记录
总体的执行步骤如下:
- 账号对应
- git-svn拉取原来SVN项目
- 提交项目到Gitlab上
执行步骤
接下来我们就要进行转换了。
账号对应
SVN使用的是用户账号展示的提交记录,但是git使用的是账号和邮箱进行人员确认的,因此我们需要使用将二者进行对应。
新建个txt文本文档,名字随便取(但是我这儿使用是svn2git.txt),文本内容如下:zhangsan=zhangsan <zhangsan@gmail.com>
,等号左边是SVN账号,等号右边是Gitlab账号和邮箱信息(注意:离职人员也得转换,否则报错)。
先别急,SVN账号可以用命令导出来的。
打开你的Git BASH(你得先安装了Git以后才有的)进入你要保存账号对应文件(我这里是svn2git.txt)的目录(我是在d盘根目录使用:cd /d
),
执行如下命令:svn log 你的SVN项目的url -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"@gmail.com>"}' | sort -u > ./svn2git.txt
,这是使用的Linux的awk命令导出的svn账号信息格式化的,当然我这里用的事gmail邮箱,你可以自定义邮箱,打开看下是不是和上面的文本内容格式是一致的。
git-svn拉取SVN项目
没错,git内置了一个git-svn的工具,你可以用git-svn按照git的方式来管理svn项目,但是强烈不推荐这么干。
接下来使用git-svn拉取你的SVN项目,命令如下:git svn clone "你的SVN项目的url" --no-metadata --authors-file="d:/svn2git.txt" 你自定义的项目名
,这是使用你的账号对应转换SVN的提交记录为git提交记录。
提交项目到gitlab
切换到使用Git-svn拉取的项目目录下,执行:git config --local user.name "你的gitlab用户名"
,git config --local user.email "你的gitlab邮箱"
,这两个是配置项目用户信息,git remote add origin 你的gitlab项目的git地址(注意使用http开头的,不雅用git开头的)
, git push -u origin master
,这两个命令是添加远程操作url和推送远程。
总结
svn迁移git就是通过git-svn将用户提交记录进行对应,然后推送到新项目中去。因此建议让大家把之前要提交的代码全部提交上去然后开始进行推送,否则就得拷贝拷贝到新项目代码了。