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

如何正确迁移分支根目录在子文件夹的SVN仓库至Git

解决SVN分支根目录为子文件夹的Git迁移问题

核心问题

你的SVN仓库中,trunk包含Folder1、Folder2等顶层目录,但分支BranchA基于trunk/Folder1创建,迁移到Git后,BranchA的内容直接显示为sub1.1、sub1.2等子目录,丢失了Folder1的层级结构,无法与trunk的目录结构对齐。

方法一:迁移时通过规则配置直接修正(推荐)

如果使用svn2git,可通过自定义规则文件,将分支内容映射到对应子目录下,确保目录结构与trunk一致。

  1. 创建规则文件rules.txt,内容如下:
match /trunk/
  rewrite /trunk/(.*) /$1/
match /branches/BranchA/
  rewrite /branches/BranchA/(.*) /Folder1/$1/
# 如有其他类似分支,添加对应的match和rewrite规则
match /tags/
  rewrite /tags/(.*) /$1/
  • 规则说明:将trunk内容直接映射到Git根目录;将BranchA的所有内容映射到Git的Folder1目录下,与trunk结构匹配。
  1. 执行迁移命令(替换为你的SVN仓库地址和用户映射文件):
    svn2git http://your-svn-repo-url --rules rules.txt --authors authors.txt

方法二:迁移后重写分支历史修正

如果已完成基础迁移,可通过git filter-repo(替代老旧的git filter-branch)重写分支历史,补全目录层级:

  1. 切换到目标分支:
    git checkout BranchA

  2. 重写该分支的所有提交,将所有文件移动到Folder1目录下:
    git filter-repo --to-subdirectory-filter Folder1

  3. 若有其他类似分支,重复上述两步操作。

  4. 将修正后的分支推送到Git远程仓库(重写历史后需强制推送):
    git push origin BranchA --force

注意事项

  • 两种方法都会修改提交历史,迁移前务必备份SVN仓库和临时Git仓库。
  • 若有多个非根目录分支,需为每个分支添加对应规则或执行重写操作。
  • 无需双向同步的情况下,完成修正后即可直接使用Git仓库,无需保留git svn关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:42:44