本文主要总结了svn
迁移到git
的步骤。
下载迁移工具subgit
subgit
是一个基于java开发的svn2git商业迁移工具,夸平台,其import功能
(一次性把代码从svn
迁移到git
)是免费的,其他功能(主要是各种mirror功能)则是收费的。
迁移前的准备工作
由于svn
用户格式(只有用户名)与git
用户格式(由用户名和用户邮箱组成)是不一样的,需要创建一个用户映射文件authors.txt
,以在迁移记录时进行转换。authors.txt
的内容格式如下:
york = york <york@example.com>
kiii = kitty <kitty@example.com>
如何快速获得
svn
仓库里曾经提交过记录的的用户呢?可通过以下命令行获得:cd path/to/svn_repo svn log --quiet | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq
或者直接从远程仓库获得:
svn log --quiet http://path/to/root/of/project | grep -E "r[0-9]+ \| .+ \|" | cut -d'|' -f2 | sed 's/ //g' | sort | uniq
开始迁移
- 使用subgit的import功能,一次性把代码从svn迁移到git
cd svn2git_workspace
path/to/subgit-3.2.2/bin/subgit import --non-interactive --default-domain YOUR_DOMAIN --authors-file path/to/authors.txt --trunk trunk --tags tags --branches branches --username SVN_USERNAME --password SVN_PASSWORD --svn-url http://svn.example.com/path/to/repo repo.git
如果迁移过程中遇到错误导致中断,执行
subgit import repo.git
进行恢复
- 克隆一个裸库,去掉无用的svn信息
git clone --bare repo.git repo-clone.git
- 推送代码到git远程仓库
cd repo-clone.git
git remote add gitlab http://gitlab.example.com/path/to/repo.git
- 推送需要的分支到远程参考
//推送所有本地分支到远程仓库
git push gitlab --all
//或者
//推送指定分支
git push gitlab master:master
git push gitlab v1.3.0:develop
- 推送所有本地tag到远程仓库
git push gitlab --tags