SVN代码迁移到GIT,并保留提交历史

参考文章:https://docs.gitlab.com/ee/user/project/import/svn.html
环境:centos
工具:SubGit、svn2git

一、平滑迁移
subgit是一个平滑迁移svn代码到git的工具,速度快、安全性高
1、下载SubGit
https://subgit.com/download
2、配置变量,指向git库在系统的真实路径
GIT_REPO_PATH=/var/opt/gitlab/git-data/repositories/USER/REPOS.git
3、配置变量,指向svn代码库地址
SVN_PROJECT_URL=http://svn.company.com/repos/project
4、运行SubGit来设置Git/SVN镜像
subgit configure --layout auto $SVN_PROJECT_URL $GIT_REPO_PATH
5、运行SubGit将SVN库初始转换为Git库
subgit install $GIT_REPO_PATH
待初始化完成后,svn和git开始双向同步
ps:如果需要一次性转换,则需要运行 subgit import $GIT_REPO_PATH

优点:双向同步,所以在同步期间不影响代码正常提交,且操作简单、速度快、安全
缺点:如果git是通过docker部署的容器,git库真实路径在容器内部,所以如果选用此方式需要在服务器重新搭建一个git服务用于同步。
二、强制迁移
如果迁移后需要废弃svn,则推荐此强制迁移做法,可以完整保留所有的提交历史、数据、协作用户等
1、安装svn2git
yum install svn2git
2、获取svn提交用户信息,并生成svn-git用户对应文件
svn log --quiet | grep -E “r[0-9]+ | .+ |” | cut -d’|’ -f2 | sed ‘s/ //g’ | sort | uniq
3、检出代码库并进行git标签、分支转换
svn2git https://svn.example.com/path/to/repo --authors /path/to/authors.txt --username –password
4、添加git库信息并push所有分支和标签
git remote add origin git@gitlab.com:/.git
git push --all origin
git push --tags origin
ps:如果代码库中有大文件,为避免同步失败,可以在step3之前运行 git config gc.auto 0
优点:直接同步到现在的gitlab(保证git所在服务器磁盘空间足够)
缺点:速度较慢,且迁移期间不能提交代码,以免提交同步不完整

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值