首页 > 解决方案 > 嵌套分支,可变深度

问题描述

我们有一个大型的、相当古老的 SVN 存储库,我们希望将其迁移到 git。不幸的是,我们的分支结构非常棘手。它具有不同深度的嵌套分支,其中一些分支与嵌套文件夹一起存在:

branches/
         branch1/
         branch2/
         teams/
               team1/
                     projectBranch1
               team2/
                     projectBranch2

在我的 git 配置中,我尝试过

branches = branches/*/*/*:refs/remotes/origin/*/*/*

它已经很好地导入了团队分支,但是在获取“branch1”的更新时,它将前几个项目目录视为分支名称的一部分,创建了类似branch1/src/com/. 然后我尝试了:

branches = branches/teams/*/*:refs/remotes/origin/teams/*/*
branches = branches/*:refs/remotes/origin/*

希望首先匹配对团队项目的提交,并且第一级通配符仅用于顶级分支。但它随后又将团队分支视为“团队”分支的子目录。然后我希望颠倒配置文件中术语的顺序可能会改变匹配顺序,但这似乎没有什么区别。

通过调整顶级通配符以仅匹配某些名称,我设法从最近的修订版中获得了干净的迁移,因此这两个branches术语之间没有歧义。但理想情况下,我想从较旧的版本中迁移出来,在这些版本中,顶级分支名称不太容易挑选出来。有没有办法说服 git-svnbranches使用“最具体的优先”规则匹配条目?

标签: gitgit-svn

解决方案


我建议您尝试使用 SubGit 进行布局:它可以(?)处理比 git-svn更复杂的情况

branches = branches/*:refs/heads/*
branches = feature_*:refs/heads/features/*
branches = hotfix/*_*:refs/heads/hotfix/*/*

注意远程和本地部分的通配符使用以及svn-branchs不同路径的不同命名空间的翻译

甚至是历史性的动作和重命名

如果我正确理解了您的分支树,即您同时拥有

branches/branch*/
…
branches/teams/team*/projectBranch*

您的 SubGit 映射可能类似于(TBT!)

branches = branches/*:refs/remotes/origin/*
branches = teambranches/*-*:refs/remotes/origin/teams/*/*

推荐阅读