SVN通过奇怪的分支向Git迁移

时间:2019-03-21 17:28:59

标签: git svn migration svn2git

我正在使用KDE svn-all-fast-export通过丑陋的22GB SVN存储库迁移到git。旧的维护者做了一些非常奇怪的分支。我遇到一种情况,我需要为单个提交创建2个分支。

树看起来像这样

trunk
branch/lots-of_branches
tags/lots_of_tags

到目前为止一切都很好...

现在,有人通过将顶层标签和分支文件夹复制(svn复制)创建为“新”来创建一个名为“新”的新文件夹。我不确定如何创建顶级分支和标签文件夹以及如何创建子文件夹。

我的规则如下:

match /branch/([^/]+)/
  repository myrepo
  branch legacy/branch/\1
end match

match /tags/([^/]+)/
  repository myrepo
  annotated true
  branch refs/tags/legacy/\1
end match

这将导致许多分支称为legacy / branch / branch_name,但对于上述情况则没有legacy / branch。我的问题是,有没有一种方法可以为每个分支创建一个分支,并且还有一个分支在每次修改分支文件夹时都会更新?

3 个答案:

答案 0 :(得分:0)

您可以通过符号引用到达那里。

git symbolic-ref refs/heads/legacy-another-foo refs/heads/legacy-foo

请记住,如果您签出参考git,则不会报告其符号名称。 因此在git checkout legacy-another-foo之后,git status将报告您在legacy-foo

您可以仅过滤掉旧文件夹而不导入它吗?

对不起,您的前任是“创意人”

答案 1 :(得分:0)

纯git-svn 的术语,您可以告诉多个可以找到标签和分支的位置。您将为分支设置2个位置(一个在分支中,另一个在新/分支中),并为标签设置两个位置(一个在标签中,另一个在new /标签中)。

答案 2 :(得分:0)

@thekbb 好主意,但我正在努力维持历史。我的最新测试是运行当前规则集,直到它消失,然后使用其他集合重新运行导入程序以生成顶级引用。

第二组规则:

match /branch/
  repository myrepo
  branch legacy/branch
end match

match /tags/
  repository myrepo
  branch legacy/tags
end

此后,我将在一次提交后恢复第一组结果

++++++++++++++++++++ 更新资料 ++++++++++++++++++++
这工作了。第二遍比第一遍快,因为它忽略了除触摸/ branch或/ tags的提交以外的所有内容。