svn2git总结

本文主要总结了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

开始迁移

  1. 使用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进行恢复

  1. 克隆一个裸库,去掉无用的svn信息
git clone --bare repo.git repo-clone.git
  1. 推送代码到git远程仓库
cd repo-clone.git
git remote add gitlab  http://gitlab.example.com/path/to/repo.git
  1. 推送需要的分支到远程参考
//推送所有本地分支到远程仓库
git push gitlab --all 

//或者
//推送指定分支
git push gitlab master:master
git push gitlab v1.3.0:develop
  1. 推送所有本地tag到远程仓库
git push gitlab --tags
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容