建立 SVN 用户到 Git 用户的映射
在 SVN,每个提交者在主机上有一个用户名,记录于提交信息中,而 Git 使用作者名称和邮箱来标记用户。
如果想迁移前后保证 Commit 作者信息可追溯,需要建立从 SVN 用户到 Git 作者的映射关系,这需要建立一个叫做 userinfo.txt 的文件,利用 SVN 作者 = 作者昵称 <邮箱地址>的格式表示映射关系。
查看 SVN 用户
首先检出全部 SVN 用户列表:
svn log --xml | grep "^<author" | sort -u | \awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt
输出的 userinfo.txt 文件内容如下:
fengxia_liu
ming_wang
qianchi_liu
yan_zhang
yongming_gu
zhaowei_ding
描述映射关系
接着按以上格式描述映射关系:
zhiming_wang = zhiming_wang <>
zhiqianchi_liu = zhiqianchi_liu <>
zhiyan_zhang = zhiyan_zhang <>
zhiming_gu = zhiming_gu <>
此时,userinfo.txt 就准备好了,接下来开始克隆 SVN 地址。
下载 SVN 代码库
git svn clone {SVN项目地址} --no-metadata --authors-file=userinfo.txt
创建一个空仓库
接下来就可以将本地的仓库 push 到远程地址,命令如下:
git remote add origin http://172.16.10.2/product/server.git
推送至远端 Git 仓库
git push origin --all
如果原来的 SVN 项目有 Tags 的话, git push -u origin –all 运行之后并不能让分支和标签都推送到远端。实际上,只提交了 branches ,并没有提交tags。此时,你需要执行一下git push –tags
git push -u origin --tags