svn2git总结

作者: York_魚 | 来源:发表于2016-11-26 23:18 被阅读469次

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

相关文章

网友评论

    本文标题:svn2git总结

    本文链接:https://www.haomeiwen.com/subject/krmgpttx.html