git - 嵌套分支,可变深度
问题描述
我们有一个大型的、相当古老的 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
使用“最具体的优先”规则匹配条目?
解决方案
我建议您尝试使用 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/*/*
推荐阅读
- json - 将 json 文件传递给 AWS 自动缩放 create-launch-configuration --block-device-mapping 时遇到问题
- perl - 为什么 perl 不能找到存在于 @INC 中的模块?
- reactjs - 如何获取在反应中点击的图像的图像网址
- c++ - “隐藏”传递外部依赖项/将库与 CMake 组合
- azure-powershell - Powershell 的适当过滤器语法是什么?
- flutter - Flutter 标准 WebView 请求/响应调试值
- flutter - 使用不包含 MediaQuery 的上下文调用 MediaQuery.of(),即使在 MaterialApp 中也是如此
- python - grpc 客户端 python:如何创建 grpc 客户端连接池以获得更好的吞吐量?
- php - 如何让 php 模拟对 url 的访问?
- jquery - 如何正确输出CFC查询结果