最近公司要将SVN服务迁移,前段时间刚把SVN服务从windows服务器迁移到Linux。
现在项目越来越多,加之SVN的集中式管理,不支持分布式,分支切换麻烦,Git支持分布式开发,快照式数据,速度快,主干分支切换方便。给领导建议了一下把仓库迁移到git,领导的要求就是可以迁移,但是不能丢提交记录。经过自己的研究尝试,最终把SVN仓库成功迁移到git,下面将迁移过程分享出来。
一.软件安装及git配置
1.git安装
2.gitlab安装(我们使用的gogs,具体根据公司内部的架构和情况选择,中小企业,并且团规规模不是很大的情况下gogs是足够使用了)
3.git账号配置
在你准备作为git本地仓库的文件夹目录->鼠标右键->Git Bash Here 进入git命令行,
输入如下命令:
git config --global user.name "username"
git config --global user.email "username@mail.com"
username是gitlab下注册的用户名,username@mail.com是gitlab下注册的邮箱
查看配置:
git config --list
4.svn账号与git账号映射
在当前文件夹下创建文件userinfo.txt,文件内容如下斜体: (注:svn账号3在svn中有记录,但无git账号,提交记录中涉及到的svn账号需要全部列举出来,否则会报错。提交记录可以选择指定记录到最新记录,下面会有说明)
svn用户名1=git用户名1<git邮箱1@mail.com>
svn用户名2=git用户名2<git邮箱2@mail.com>
svn用户名3=git用户名3<git邮箱3@mail.com>
二. svn项目导出到本地git仓库
1.在存放userinfo.txt的同级目录下新建一个文件夹,名称最好命名成你的项目名称
2.继续在Git Bash执行下面命令:
git svn clone -r 1126:HEAD svnurl --no-metadata --authors-file=userinfo.txt template
注:此处的 -r 1126:HEAD 代表从svn的1126版本到最新版本的提交记录,避免从第一个版本拉取数据量过大,操作耗时高。svnurl是你的svn项目地址。如果需要拉取所有记录,可去除 -r 1126:HEAD
此处执行命令后会弹出一个窗口,需要登录两次,第一次是登录本地电脑,使用你本地的计算机用户和密码就好;第二步是登录gitlab的用户名密码,这个根据自己注册的用户密码填写就好。
三、在gitlab上创建仓库(我们用的是gogs)
下图红框的地址为后面使用的giturl
四、关联git远程仓库
导入成功后,输入如下命令:
cd template
git remote add origin giturl
注:giturl是你的git项目地址
查看关联情况:
git remote -v
如果关联有误,可以删除关联
git remote rm origin
五、提交记录至git
提交记录之前,先拉取远程git项目文件(README.md),否则直接提交会报错。若仓库中没有文件,执行此步没有提示。
git pull --rebase origin master
拉取成功后,执行push命令
git push -u origin master