嵌套分支,深度可变

时间:2019-05-23 11:10:25

标签: git git-svn

我们有一个很大的,很旧的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-svn使用“最具体的优先”规则来匹配branches条目?

1 个答案:

答案 0 :(得分:1)

我建议为您的布局尝试SubGit:它比git-svn可以(?)处理more complex cases

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

请注意在远程和本地部分上使用通配符,并将其转换为svn分支的不同路径的不同名称空间

甚至historical moves and renames

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

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

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

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