代码仓库转换,从SVN到GIT 转载

有时候遇到很多开源的代码都是使用SVN仓库管理,对于习惯使用GIT的用户很是不方便,本文参考falcon的实现,记录自己的转换过程。

## 1. 准备GIT仓库

$ mkdir git-lib
$ cd git-lib
$ git svn init svn:[bsp_url]/[kernel] --no-metadata

在下载代码之前还必须建立好帐户的映射文件,这样SVN提交的LOG信息也会转换为GIT的commit形式,更详细的参数可以通过git help svn查看。

2. 制作帐户映射文件

$ cd path/to/svn-lib
$ svn log -q | grep '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq > svn-author.txt    #svn 帐户

上述得到的是一些帐户名,在GIT中需要用户名与邮箱信息,因些必须手动关联上邮箱信息,针对有些人用户名与邮箱名不一样的情况这里不好区分,统一当一致处理

$ cd path/to/git-lib
$ awk '{print $1, "\t= ", $1, " <"$1"@xxx.com>"}' svn-author.txt > .git/svn/kf-svn.users.txt          #关联用户信息
$ git config svn.authorsfile .git/svn/kf-svn.users.txt

加上邮箱后得到了GIT要求的用户名邮箱地址对帐号文件,添加到GIT配置,这里用户必须提前配置好,不在文件中的提交将不会被拉取到本地。

3. 下载代码仓库

$ cd path/to/git-lib
$ git svn fetch        #抓取代码
$ git gc               #压缩仓库
$ git log              #查看更改信息

SVN仓库的所有更新默认都会合并到git-svn分支上,这里没有涉及到SVN仓库的tags和branch目录,这篇文章有介绍

4. 后续更新

$ git checkout my_branch    #切换到要更新的分支
$ git svn fetch             #抓取服务器SVN仓库代码
$ git merge git-svn         #合并更新到当前分支


PS: 使用这种方法只能跟踪SVN仓库的更新,并不能提交本地GIT的更新到SVN。或许可以,但现在我还不知道。



blog comments powered by Disqus

© heljoy 2013 with help from Jekyll Bootstrap and Twitter Bootstrap