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

如何将多个SVN trunk路径迁移至单个Git master且保留历史?

迁移多个SVN Trunk到单个Git Master分支的方法

作为经常处理SVN转Git迁移的人,我完全懂你遇到的痛点——git svn clone -s确实只适配标准单路径的SVN仓库,要把多个独立trunk合并到同一个Git分支,我们可以分步骤实现,同时完整保留所有历史记录:

步骤1:创建目标Git仓库

先搭一个空的Git仓库,作为最终整合所有SVN trunk的容器:

mkdir my-combined-git-repo
cd my-combined-git-repo
git init

步骤2:准备SVN作者映射(可选但推荐)

为了让Git提交记录的作者信息和SVN完全对应,先生成并编辑作者映射文件:

# 从任意一个SVN trunk导出所有作者列表
git svn log --xml http://your-svn-repo/path/to/trunk | grep -E "<author>" | sort | uniq | sed -e "s/<author>//" -e "s/<\/author>//" > authors.txt

然后编辑authors.txt,每行格式为:

svn-username = Full Name <email@example.com>

步骤3:逐个克隆并合并SVN Trunk

对每个需要迁移的SVN trunk,重复以下操作:

克隆单个SVN Trunk

# 回到上级目录
cd ..
# 克隆当前SVN trunk,若准备了作者映射文件就带上参数
git svn clone --trunk=/path/to/svn/trunk --authors-file=authors.txt http://your-svn-repo svn-trunk-1

将克隆的trunk合并到目标Git仓库

cd my-combined-git-repo
# 添加克隆的trunk作为临时远程仓库
git remote add trunk-1 ../svn-trunk-1
# 拉取该trunk的全部历史记录
git fetch trunk-1

# 如果是第一个合并的trunk,直接把当前master重置到该trunk的HEAD
git reset --hard trunk-1/master

# 如果是后续的trunk,执行合并(允许无关历史,因为不同SVN trunk的初始提交无关联)
git merge trunk-1/master --allow-unrelated-histories

如果合并时出现文件冲突,手动解决冲突后执行git add .和git commit完成合并即可。

步骤4:清理与验证

所有trunk合并完成后,可以移除临时添加的远程仓库:

git remote remove trunk-1
git remote remove trunk-2
# 依此类推,移除所有临时远程

然后查看Git日志,确认所有SVN历史都被完整保留:

git log --oneline

这样就能把多个独立的SVN trunk的代码和历史,完整整合到同一个Git master分支里了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:22:21