Subgit仅镜像SVN指定分支并保留完整提交历史的问题咨询
根因说明
你当前配置的问题在于Subgit需要识别分支的完整复制/切分路径才能串联起完整提交历史,仅映射目标分支或部分上游路径时,会在分支创建的节点截断历史。
可行方案
方案1:调整Subgit映射配置(推荐,适合长期同步场景)
- 先修改SVN Mirror插件的映射规则,把
taggedTrunk所有上游来源路径都加入映射,同时开启历史追溯配置:
[svn] # 替换为你的SVN仓库根地址 url = https://your-svn-repo-address # 按分支创建顺序加入所有关联路径映射,让Subgit识别复制关系 trunk = Project A/trunk:refs/heads/originalTrunk branches = Project A/branches/feature1:refs/heads/feature1 branches = Project A/branches/taggedTrunk:refs/heads/development includePath = /src # 开启拷贝历史追溯,避免截断 followCopies = true
- 触发一次全量同步,此时你会看到Git仓库里多出
originalTrunk、feature1两个临时分支,development分支已经可以看到从trunk创建以来的完整历史。 - 如果不需要保留其他分支,在配置中添加排除规则,后续同步不会再将这些分支推送到Git:
excludeBranches = originalTrunk excludeBranches = feature1
保存配置后重载插件即可,多余分支可以手动从Git仓库删除,不影响development的历史记录。
方案2:预拉取完整历史后再配置同步(适合仅需一次迁移+后续增量同步场景)
如果不想调整Subgit的多分支映射,也可以先用git svn命令拉取完整历史后再推送到目标仓库:
- 本地执行命令拉取SVN全量历史:
# 初始化git svn仓库 git svn init <你的SVN仓库根地址> \ --trunk="Project A/trunk" \ --branches="Project A/branches" \ --include-paths="^Project A/src/" # 拉取全量提交 git svn fetch
- 拉取完成后,将本地对应
taggedTrunk的分支重命名为development,删除其他多余分支后推送到Bitbucket的目标Git仓库。 - 再按照你原来的单分支映射规则配置Subgit SVN Mirror插件做后续增量同步即可,已有的完整历史不会被截断。
内容的提问来源于stack exchange,提问作者BabyDoll
相关产品推荐
相关产品推荐

