需求
- svn仓库迁移到git
- 保留commit
- 用户信息完成映射
环境
- MacOS
- svn仓库
- git仓库
准备
插件安装
brew install git
brew install perl
brew install subversion
brew install git-svn
操作
收集SVN仓库中用户信息
- 本地检出
$ svn checkout {svn-server}/project_repo
- 进入目录
$ cd /project_repo
- 生成user.txt文件
$ svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
- 打开并调整user.txt文件 (这个文件就是用户映射,git上邮箱是用户唯一键)
格式svn名称 = git用户 <git邮箱>
ZhouJielun = 杰伦 <ZhouJielun@163.com>
CyberPunch = 老姜 <cyberpunch@163.com>
...
git-svn命令重新拉取副本
记得带上user.txt!!!
$ git svn clone [svn仓库url] [本地仓库别名] --prefix="" --authors-file=[users.txt文件]
$ cd /{仓库别名}
推到新git仓库(提前把git仓库准备好)
$ git remote add origin [git仓库url]
$ git push origin --all
$ git push origin --tags
其他问题
1.SVN/Core.pm 错误
- 错误信息
Can't locate SVN/Core.pm in @INC (you may need to install the SVN::Core module)
- 解决
$ open -t /usr/local/Cellar/git/{version}/libexec/git-core/git-svn
用文本工具,替换
replace#!/usr/bin/perl
==>#!/usr/local/bin/perl
2.如果有svn分支如何提交到Git上
- 前提
svn分支是以文件夹形式存在的,需要重新来取一个副本 - 解决
参考上述步骤,用git-svn
命令重新拉取svn分支的副本
推到git仓库是略微不同
$ git remote add origin [git仓库url]
$ git push origin master:{指定远端分支名称}