# svn 仓库迁移到 git 仓库 {#svn-仓库迁移到-git-仓库}
当前主流的版本管理系统当 git 莫属, 可能一些老的项目用的还是 svn,那么怎么将这些 svn 项目迁移到 git 中呢? 当然同时会把 commit 提交日志一并迁移过来。
本文讲述迁移步骤。
# 1. 创建项目作者文件 {#_1-创建项目作者文件}
提示
需要收集 svn 项目的作者信息, 供后续步骤使用。
文件的格式如下:
zhangsan = zhangsan <zhangsan@gmail.com>
lisi = lisi <lisi@gmail.com>
wangwu = wangwu <wangwu@gmail.com>
文件中每一行的格式:[svn 的名字] = [git 上的名字] <[git 上的 email]>
有 2 种创建方式
-
手动创建
手动创建/root/users.txt 文件
将当前项目的作者补充到 users.txt 文件中即可。 -
自动生成
可以通过 svn 命令自动提取出作者信息, 并生成 user.txt 文件
执行如下命令
svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/ (.*?)</author>/$1 = /' > /root/users.txt(py3.6) wangshibiao@wangshibiao:/data/workspace/demo$ svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > /root/users.txt (py3.6) wangshibiao@wangshibiao:/data/workspace/demo$ cat /root/users.txt zhangsan = lisi = (py3.6) wangshibiao@wangshibiao:/data/workspace/demo$
完善 users.txt 中的 git 信息 部分。
# 2. 将 svn 项目拉取为 git 项目 {#_2-将-svn-项目拉取为-git-项目}
git 命令原生支持将 svn 项目克隆到本地,并自动转换为 git 项目 。
命令格式:
git svn clone svn项目的svn地址 --no-metadata --authors-file=/root/users.txt git项目名称
若您没有必要迁移所有的提交日志, 您可以仅拉取某个版本以后的提交记录。只需补充参数-r 即可。
git svn clone svn项目的svn地址 --no-metadata --authors-file=/root/users.txt git项目名称 -r版本号:HEAD
提示
若拉取失败,并提示 Ignoring error from SVN, path probably does not exist,则可能是某个版本的日志有问题。
可通过-r 指定版本号, 仅拉取该版本号之后的提交记录。
# 3. 添加远程仓库 {#_3-添加远程仓库}
git remote add origin 远程仓库地址
# 4. 推送到远程仓库 {#_4-推送到远程仓库}
将本地的 git 项目推送到远程仓库。 git push -u origin master