You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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提交者的信息映射。

迁移操作步骤

  1. 新建工作目录并进入:
    mkdir svn-migrate-workspace && cd svn-migrate-workspace
    
  2. 执行拉取转换,根据SVN仓库结构调整参数:
    标准SVN结构(根目录为trunk/branches/tags):
    svn2git http://你的SVN仓库地址 --authors ../authors.txt
    
    非标准SVN结构(trunk命名为Trunk、分支目录为Branches、标签目录为Tags):
    svn2git http://你的SVN仓库地址 -T Trunk -B Branches -t Tags --authors ../authors.txt
    
    如果存在不需要迁移的冗余目录,可增加--exclude 目录路径参数过滤,减少拉取压力
    拉取过程中如果出现卡顿中断,直接重新执行上述命令即可,svn2git会自动从断点处继续拉取,无需从头开始。
  3. 拉取完成后校验转换结果:
    • 查看所有分支:git branch -a
    • 查看所有标签:git tag -l
      确认SVN端的所有分支、标签都已正确转换为Git格式。
  4. 关联Bitbucket远程仓库:
    git remote add origin https://你的Bitbucket仓库地址.git
    
  5. 全量推送至远程仓库:
    # 推送所有分支
    git push origin --all
    # 推送所有标签
    git push origin --tags
    

方案二:原生git-svn分批次拉取(适配无法安装第三方工具的场景)

如果只能使用原生git-svn工具,可通过分批次拉取解决全量fetch卡顿的问题:

  1. 执行初始化和作者配置,和你此前的操作逻辑一致:
    git svn init http://你的SVN仓库地址 -T Trunk -B Branches -t Tags --prefix svn/
    git config svn.authorsfile ../authors.txt
    
  2. 分批次拉取提交记录,不要一次性全量拉取,例如按千位粒度拆分:
    # 先拉取1到1000版本
    git svn fetch -r 1:1000
    # 再拉取1001到2000版本,依次类推
    git svn fetch -r 1001:2000
    # 拉取到最新版本后,再执行一次全量fetch补全遗漏记录
    git svn fetch
    
  3. 后续标签转换、远程推送的步骤和你此前的操作一致即可。

迁移后校验

迁移完成后可抽取多个SVN历史提交记录,和Git仓库中的提交人、提交时间、提交内容逐一比对,确认信息完全一致;再切换到不同分支校验代码内容和SVN对应分支匹配,确保迁移无信息丢失。

内容的提问来源于stack exchange,提问作者Gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 08:00:05