②将SVN迁移到GitLab-多分支多标签迁移

之前我们介绍了《①将SVN迁移到GitLab-单分支迁移》,文中研究了svn迁移到git单分支的操作过程,本文针对实际开发过程中svn使用到的trunk、branches、tags情况进行迁移,本文的svn代码情况如图所示:

②将SVN迁移到GitLab-多分支多标签迁移_第1张图片 

具体的可以参考博文,《SVN的branches、trunk、tags使用》。

一、拷贝svn相关仓库代码到本地

svn co --username shaw001 --password shaw001 svn://192.168.109.130/  code

期间要输入svn账号密码确认,

②将SVN迁移到GitLab-多分支多标签迁移_第2张图片 

成功之后,会生成一个code文件夹,里头也检出了相关分支代码记录。

②将SVN迁移到GitLab-多分支多标签迁移_第3张图片

二、生成用户列表,并配置相关svn和gitlab用户对应关系

svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /home/svn/users.txt 

红色字体标注路径文件可修改。

 

查看下相关的文件内容:

  

修改与gitlab的对应关系,修改后如下:

 

三、拷贝svn代码,并本地生成gitlab仓库

通过以下命令拷贝svn代码生成本地gitlab仓库:

git svn clone svn://192.168.109.130/ --authors-file=/home/svn/users.txt  --no-metadata  -s branches

 ②将SVN迁移到GitLab-多分支多标签迁移_第4张图片 

 ②将SVN迁移到GitLab-多分支多标签迁移_第5张图片 

四、配置远程仓库tags和branches相关配置

进入到branches文件夹里头,配置相关tag记录:

cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/origin/tags

这儿要注意下,有时候会提示没有.git/refs/remotes/origin/tags/*目录,这是就要自己去git目录里头查看具体是什么目录,有可能是.git/refs/remotes/tags/*路径 

配置相关分支记录

cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes

②将SVN迁移到GitLab-多分支多标签迁移_第6张图片 

五、远程创建branches项目进行代码接收,并设置gitlab目标推送地址

登录gitlab创建一个branches项目

②将SVN迁移到GitLab-多分支多标签迁移_第7张图片

 设置推送地址:

git remote add origin [email protected]:shaw001/branches.git

六、配置gitlab全局用户变量

配置全局用户变量,另外还得配置sshKey密钥进行免密推送。

git config --global user.name shaw001
git config --global user.email [email protected]

②将SVN迁移到GitLab-多分支多标签迁移_第8张图片 

七、推送分支和标签到远程

推送分支到远程gitlab仓库

git push origin --all

②将SVN迁移到GitLab-多分支多标签迁移_第9张图片 

②将SVN迁移到GitLab-多分支多标签迁移_第10张图片 

 从记录可以看出,分支已经推送了。接下来推送标签到远程gitlab仓库

git push origin --tags

②将SVN迁移到GitLab-多分支多标签迁移_第11张图片 

 到gitlab查看下相关记录。

②将SVN迁移到GitLab-多分支多标签迁移_第12张图片

 可以看到代码、分支、标签都已经同步到gitlab上了。我们看下提交记录:

②将SVN迁移到GitLab-多分支多标签迁移_第13张图片

 ok,SVN多分支、多标签迁移gitlab就介绍完了,下篇文章介绍如果svn继续开发,如何增量同步代码到gitlab上。 

完整流程脚本如下: 

1、拷贝svn相关仓库代码到本地
svn co --username shaw001 --password shaw001 svn://192.168.109.130/  code

2、生成用户列表,并配置相关svn和gitlab用户对应关系
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /home/svn/users.txt

[email protected]
[email protected]

3、拷贝svn代码,并本地生成gitlab仓库
git svn clone svn://192.168.109.130/ --authors-file=/home/svn/users.txt  --no-metadata  -s branches

4、配置远程仓库tags和branches相关配置
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/origin/tags

cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes

5、设置gitlab目标推送地址
git remote add origin [email protected]:shaw001/branches.git

6、配置gitlab全局用户变量
git config --global user.name shaw001
git config --global user.email [email protected]

7、推送分支和标签到远程
git push origin --all
git push origin --tags

 参考:http://www.imooc.com/article/details/id/30301

你可能感兴趣的:(②将SVN迁移到GitLab-多分支多标签迁移)