一、背景
随着项目越来越大,原有SVN已经很难支撑现有工程(集中式管理,服务器压力大,分支主干切换麻烦)。所以,决定将SVN切换成Git(分布式开发,快照式数据,速度快,主干分支切换方便)。现将SVN项目迁移至Git过程分享出来,希望能够对大家在操作迁移时提供帮助。
二、准备
- git安装(此处不做说明)
- git账号配置
任意磁盘目录->鼠标右键->Git Bash Here 进入git命令行,
输入如下命令:
git config --global user.name "XXX"
git config --global user.email "XXX@mail.com"
第一条设置gitlab下注册的用户名,第二条设置gitlab下注册的邮箱
查看配置:
git config --list
- svn账号与git账号映射,userinfo.txt: (注:svn账号3在svn中有记录,但无git账号,提交记录中涉及到的svn账号需要全部列举出来,否则会报错。提交记录可以选择指定记录到最新记录,下面会有说明)
三、导出SVN项目至本地
1.在存放userinfo.txt的同级目录下新建一个文件夹。
2.鼠标右键->Git Bash Here 进入git命令行:
git svn clone -r 282506:HEAD svnurl --no-metadata --authors-file=userinfo.txt randomfree
注:此处的 -r 282506:HEAD 代表从svn的282506版本到最新版本的提交记录,避免从第一个版本拉取数据量过大,操作耗时高。svnurl是你的svn项目地址。如果需要拉取所有记录,可去除 -r 282506:HEAD
-r 参数可以指定起始版本号。FROM_VERSION 可以指定从哪个版本导入,冒号后面跟着的是最后一个版本的版本号,如 282506:HEAD , 282506:282606。
这时会弹出来两个对话框, 让你输入SVN的账号和密码, 当你输入正确的SVN账号和密码时, 代码就会开始迁移. 就会出现如下类似的log
这就表示迁移成功了, 现在要想看以前的提交记录是否迁移过来的话, 我们就需要在命令行里进入的本地仓库根目录中(也就是带有.git的目录), 进入之后输入git log, 就可以看到以前的提交记录了。
四、关联git远程仓库
push本地仓库到远程服务器仓库,注意:首先要确保你的远程服务器上有这么一个仓库。
git remote add origin git@192.168.66.13:/home/git/gitrepo/test.git
进行这两个操作的时候, 会提示你输入你的Git的账号和密码, 点击ok之后就会进行push操作.
注意: 这一步的时候可能会提示一个错误:fatal: remote origin already exists.
如果出现如上所说的错误,解决办法:
git remote rm origin #删除远程git仓库
然后重复上面的操作。
查看关联情况:
git remote -v
如果关联有误,可以删除关联
git remote rm origin
完成以上步骤后,测试一下,使用TortoiseGit客户端clone项目
在查看下是否有提交信息
五、提交记录至git
提交记录之前,先拉取远程git项目文件(README.md),否则直接提交会报错。
git pull --rebase origin master
拉取成功后,执行push命令
git push -u origin master