从 SVN 迁移到 Git (二)

从 SVN 导入到 GitLab 仓库中我们只需要下载一个 git-svn 的工具,如果是windows版本的git工具,应该是内置了的;Linux 下使用yum install git-svn。一些操作可以参考git官网的两篇文章:Git-与其他系统-Git-与-SubversionGit-与其他系统-迁移到-Git

从实际的svn迁移到git中有两种方式:

1) 最简单最直接的方式,从svn拷下代码,然后上传到gitlab仓库中。

先将svn上的代码拷下来,git svn clone https://192.168.1.12/svn/trade/App_cn/Src/_CJ208_Noe

2018-04-02-11-23-02

然后使用git将其推送到gitlab仓库。

1
git remote add origin http://gitlab.xxx.com/xxxgroup/_CJ208_Noe.git

推送过程记得使用root管理:

2018-04-02-11-28-59

可以在项目提交历史看到相应的提交记录。
2018-04-02-11-29-41

这种方式提交的话,可以看到提交人的信息跟gilab是没有绑定的,这样可能就不太方便我们去查找某人,尤其是svn账号不规范的情况。

2018-04-02-11-30-49

上图就是使用czj这种缩写,有些svn账号又是全名。有可能是因为历史原因,不过如果想直接从svn导入到git,这种方式是最方便的。当然可能在历史的提交记录里面有一些杂的信息。比如:git-svn-id:XXXX这些,进入到项目里面使用git log可以看到commit信息:

2018-04-02-11-48-08

2) 将用户名和账号对应起来,然后再上传代码。不过在上传之前我们先过滤一下:

a) 先将用户名称过程,可以使用下面两个方式将svn提交的用户名存放到文本文件中:

直接使用svn地址:

1
2
svn log https://192.168.7.2/svn/trade/App_cncsen/Src/CJ325_Integral --xml | grep -P "^<author" | sort -u | \
perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt

将代码从svn拷下来之后,进入到代码根目录里面使用:

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

users.txt中我们可以看到提交人的账号信息:

2018-04-02-11-40-24

之后我们将其匹配到gitlab中的用户名:

2018-04-02-11-43-03

然后使用 git svn clone 将代码拷下来,不过这次拷贝我们加入用户的信息:

1
git svn clone https://192.168.7.246/svn/trade/App_cncsen/Src/CJ325_Integral  --authors-file=users.txt --no-metadata

之后再进行一些过滤:

过滤svn中tag分支:

1
git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done

然后将 refs/remotes 下面剩下的索引变成本地分支:

1
git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done

2018-04-02-11-50-02

这样过滤之后现在再发布到远端,下图可以看到,现在的历史中干净很多,而且名字也对应上了。

2018-04-02-11-53-25

现在就可以开心的使用git了。

本文标题:从 SVN 迁移到 Git (二)

文章作者:陈志军

发布时间:2018-04-02 11:55:10

原始链接:http://chenzhijun.me/2018/04/02/svn-to-git/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!