一、前言
最近要把svn多个项目迁移到同一个git的不同分支下。
如果只迁移代码的话,那当然好说;
问题是想把svn多个项目的提交记录也迁移到git,还是迁移到同一个git的不同分支下,就有点麻烦了。
在此总结下具体操作流程。
二、迁移目标
SVN项目my_project ,有2个url,分别是生产 与测试 的代码:
http://svncloud.it.com/my_project/prod
http://svncloud.it.com/my_project/test
要迁移到同一个git的main分支 与test分支 下,git的url为:
http://gitlab.it.com/my_project/my_project.git
三、具体操作流程
1.假设为windows环境,确认安装了TortoiseSVN,TortoiseGit,Git这3个软件
2.进入我的电脑的某个文件夹,右击->Git Bash Here,打开cmd窗口,执行命令,获取svn提交账号信息。(其中,url是svn的地址,末尾的./svn2git.txt是保存文件的路径)
svn log http://svncloud.it.com/my_project/prod -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"@taikanglife.com>"}' | sort -u > ./svn2git.txt
3.使用git svn命令,把svn项目以git的样式下载到本地,提交记录使用刚才生成的提交账号的信息文件。(其中,url还是svn的地址,末尾的./my_project是项目下载到本地后保存的路径)
git svn clone http://svncloud.it.com/my_project/prod --no-metadata --authors-file="svn2git.txt" ./my_project
4.登录gitlab,创建一个新的项目,并且在这个项目中准备2个分支。 默认会创建一个main分支(用来提交生产prod代码),然后自己手动创建一个test分支。 然后得到一个git地址,例如:
http://gitlab.it.com/my_project/my_project.git
5.现在要把本地的my_project项目,提交到git的main分支下(因为svn下载的是prod项目),操作如下: 进入本地的my_project文件夹,然后windows可以右击->Git Bash Here,打开cmd窗口。
6.因为本地my_project项目,默认是master分支,为了提交到远程git的main分支,首先需要在本地把项目从本地master分支复制到本地main分支(自己新建一个),命令如下:
git branch main
git checkout main
//如果不这样,到时候会报错:error: src refspec main does not match any
7.执行下方命令,提交到git的main分支:
git remote add origin http://gitlab.it.com/my_project/my_project.git
git push origin main --force
8.如果想把远程git的内容pull到本地,可以使用这个命令:
git pull origin main --allow-unrelated-histories
意思是允许不同的提交历史存在。(如果pull后有冲突,需要自己解决冲突)
9.上方就把svn的prod项目 迁移到了git的main分支 下;
如果要把svn的test项目迁移到同一个git的test分支下,只需要参考上方的步骤,下载test项目到本地,把main换成test即可。
|