转换你的 Subversion 到 Git

转换你的 Subversion 到 Git
当我发现我很感兴趣的项目都被其作者托管在Github的时候,让我萌生了对Git的好奇。虽然我已是如此的奥特曼,但是还是有必要写出来分享给其他还未接触 Git 的人的。之前我有介绍过《在Google Code上用 Mercurial 取代 Subversion 管理你的项目》,其实就是教大家如何把 SVN 转换到 Mercurial 且保留全部的历史记录。本文讲的则是另外一则,是教大家如何转换 SVN 到 Git,网上其实有不少的教程,但是都没有从 SVN 的 tags 到 Git 的 tags,本文提供了另外一则转换的指南,如果有不妥的地方,望请 Git 高手指教并指正。

1.安装 Git

首先,你需要安装带有 git-svn 的 Git(git-svn 可以让你 SVN 和 Git并用,如果你打算使用 Git 又不想转变你的 SVN版本库,这会是一种很好的解决方案,不过本文只是利用git-svn来一次性转换你的 SVN版本库 为 Git。)

你可以在这里下载安装Git:http://git-scm.com/download。最新版似乎都有集成git-svn,至少我安装完以上地址提供的编译好的版本,在 Terminal 里输入 git svn会有提示”Not a git repository”。

如果你正在使用MAC OS X,你应该已经用过 MacPorts了吧,那么:

prompt> sudo port install git-core +svn

Ubuntu 或者 Debian Linux用户:

prompt> sudo apt-get install git-svn

2.创建作者文件

下一步,创建一个文本文件来映射 Subversion 的提交者到 Git 的作者使历史记录里的名字和email地址正确显示。保存成authors.txt:

guaniu = Leeiio <xxx@xxx.com>

3.克隆(clone)版本库

现在来运行命令导入你的svn版本库为一个本地的Git版本库。
我假定你的 svn 版本库有标准的 /trunk,/tags 以及/branches。

prompt> git svn clone <SVN版本库地址> --no-metadata -A authors.txt -t tags -b branches -T trunk <转换的目的目录名>

比如以我的google code上的svn为例:

prompt> git svn clone http://leeiio.googlecode.com/svn/ --no-metadata -A authors.txt -t tags -b branches -T trunk Leeiio

现在,你可以运行 git log 命令,你将会看到你全部的提交历史记录以及正确显示的提交者作者名。

4.转换branches 为 tags

现在还需要做一步处理。目前你全部的 tags 在 Git 的版本库里都成了 branches(分支),并不是 tags。所以你需要手动转换它们。对于每一个 svn 的 tag你都将转换为 Git 的 tag,然后删除全部的 branch。用以下的命令列出:

promp> git branch -r

然后列出所有的tag:

prompt> git tag tagname tags/tagname
prompt> git branch -r -d tags/tagname

现在,你就有了一个本地的 Git 版本库了,包含了所有的历史记录以及 tags。

5.Push(推送)到一个公共的版本库

当然如果你并不想在网上分享你的 Git 版本库,这一步的操作你大可不必了。
以 github 为例:

prompt> git remote add origin git@github.com:userid/project.git
prompt> git push origin master --tags

Well Done!一切搞定了。开始你的 Git 之旅吧。

最后,附送一个为 SVN用户过渡到Git的使用手册

Via. How to convert from Subversion to Git