转:http://beginor.github.io/2013/03/12/migrate-from-svn-to-git.html
准备工作
确认所有用户的本地修改都签入到服务器, 将 SVN 源代码的分支尽可能的合并到主干, 已经发布的做好归档信息, 并备份 SVN 库。 虽然迁移到 Git 的风险不大, 但是备份一下总是好的。
安装 Git , 这看起来是废话, 不装 Git 怎么迁移?
将用户映射到 Git
创建一个用户映射文件, 将 SVN 用户映射到 Git 用户, 这样可以保留用户的签入历史信息, 比如用户输入的修改记录等, 这个文件看起来是这样子的:
svnuser1 = gituser1 <gituser1@yourcompany.com>
svnuser2 = gituser2 <gituser2@yourcompany.com>
这样, 用户 svnuser1 签入的历史信息在迁移之后就会映射成 gituser1 , svnuser2 映射程 gituser2 。
编辑好用户映射文件之后, 保存为 users.txt 。
克隆 SVN 库
假设 svn 库的布局是标准的 trunk 、 branches 以及 tags , 运行下面的命令开始克隆 svn 库:
git svn clone <svn repo url> --no-metadata -A users.txt -t tags -b branches -T trunk <destination dir name>
Git 会克隆 svn 完整的历史记录, 可能会需要很长的时间, 视 svn 库的历史而定。
转换分支及归档
克隆完成之后, 所有的 svn 归档在 git 看来都是远程分支 (remote tags) , 不是真正的 git 归档, 需要将他们手工转换为 git 归档, 然后再删除远程分支, 对于每一个分支或归档, 做如下操作(以 v1.0.1 归档为例):
git tag v1.0.1 tags/v1.0.1
git branch -r -d tags/v1.0.1
所有的归档信息处理完成之后, git 本地库就有了完整的历史记录。
提交到 Git 库
现在可以放心的将代码提交到自己的 git 服务器了, 命令如下:
git remote add origin git@github.com:userid/project.git
git push origin master --tags
总的来说, 从 svn 迁移到 git 还是很容易的。