SVN迁移至Git(Bitbucket)保留提交历史与分支的方案求助
SVN迁移至Git(Bitbucket)完整保留提交历史与分支的稳定方案
你此前遇到git svn fetch卡顿的问题,通常是SVN仓库存在大文件、异常提交记录、网络波动导致,推荐优先使用封装优化过的迁移工具,稳定性远高于原生git-svn操作。
方案一:使用svn2git迁移(首推,断点续传能力强)
前置依赖安装
- Debian/Ubuntu 环境:
sudo apt install git-svn ruby rubygems sudo gem install svn2git - macOS 环境:
brew install git svn ruby sudo gem install svn2git - 提前准备
authors.txt映射文件,每行格式为SVN用户名 = Git用户名 <Git绑定邮箱>,覆盖所有SVN提交者的信息映射。
迁移操作步骤
- 新建工作目录并进入:
mkdir svn-migrate-workspace && cd svn-migrate-workspace - 执行拉取转换,根据SVN仓库结构调整参数:
标准SVN结构(根目录为trunk/branches/tags):
非标准SVN结构(trunk命名为Trunk、分支目录为Branches、标签目录为Tags):svn2git http://你的SVN仓库地址 --authors ../authors.txt
如果存在不需要迁移的冗余目录,可增加svn2git http://你的SVN仓库地址 -T Trunk -B Branches -t Tags --authors ../authors.txt--exclude 目录路径参数过滤,减少拉取压力
拉取过程中如果出现卡顿中断,直接重新执行上述命令即可,svn2git会自动从断点处继续拉取,无需从头开始。 - 拉取完成后校验转换结果:
- 查看所有分支:
git branch -a - 查看所有标签:
git tag -l
确认SVN端的所有分支、标签都已正确转换为Git格式。
- 查看所有分支:
- 关联Bitbucket远程仓库:
git remote add origin https://你的Bitbucket仓库地址.git - 全量推送至远程仓库:
# 推送所有分支 git push origin --all # 推送所有标签 git push origin --tags
方案二:原生git-svn分批次拉取(适配无法安装第三方工具的场景)
如果只能使用原生git-svn工具,可通过分批次拉取解决全量fetch卡顿的问题:
- 执行初始化和作者配置,和你此前的操作逻辑一致:
git svn init http://你的SVN仓库地址 -T Trunk -B Branches -t Tags --prefix svn/ git config svn.authorsfile ../authors.txt - 分批次拉取提交记录,不要一次性全量拉取,例如按千位粒度拆分:
# 先拉取1到1000版本 git svn fetch -r 1:1000 # 再拉取1001到2000版本,依次类推 git svn fetch -r 1001:2000 # 拉取到最新版本后,再执行一次全量fetch补全遗漏记录 git svn fetch - 后续标签转换、远程推送的步骤和你此前的操作一致即可。
迁移后校验
迁移完成后可抽取多个SVN历史提交记录,和Git仓库中的提交人、提交时间、提交内容逐一比对,确认信息完全一致;再切换到不同分支校验代码内容和SVN对应分支匹配,确保迁移无信息丢失。
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

