SVN 到 Git 奇怪分支的迁移
SVN to Git Migration with Weird Branching
我正在使用 KDE svn-all-fast-export 将丑陋的 22GB SVN 存储库迁移到 git。老维护者做了一些非常奇怪的分支。我 运行 遇到需要为单个提交创建 2 个分支的情况。
树看起来像这样
trunk
branch/lots-of_branches
tags/lots_of_tags
目前一切顺利...
现在有人创建了一个名为 'new' 的新文件夹,方法是将顶级标签和分支文件夹复制(svn 复制)到 'new' 中。我不确定如何创建顶级分支和标签文件夹以及如何创建子文件夹。
我的规则如下:
match /branch/([^/]+)/
repository myrepo
branch legacy/branch/
end match
match /tags/([^/]+)/
repository myrepo
annotated true
branch refs/tags/legacy/
end match
这导致许多分支称为 legacy/branch/branch_name,但对于上述情况没有 legacy/branch。我的问题是,有没有办法为每个分支创建一个分支,并且还有另一个分支在每次修改分支文件夹时更新?
你可以通过符号引用来中途...
git symbolic-ref refs/heads/legacy-another-foo refs/heads/legacy-foo
请记住,如果您检查引用 git 将不会报告它的符号名称。
所以在 git checkout legacy-another-foo
之后,git status
会报告你在 legacy-foo
你能不能只过滤掉旧文件夹而不导入它?
对不起你的先辈'creative'
在 pure git-svn 的术语中,您可以告诉可以找到标签和分支的多个位置。您将为分支设置 2 个位置(一个在分支中,另一个在 new/branch 中)和两个标签位置(一个在标签中,另一个在 new/tags 中)。
@thekbb
好主意,但我正在努力维护历史。我最近的测试是 运行 当前的规则集,直到它消失,然后重新 运行 导入器使用不同的集来生成顶级引用。
第二套规则:
match /branch/
repository myrepo
branch legacy/branch
end match
match /tags/
repository myrepo
branch legacy/tags
end
之后我会在一次提交后恢复第一组结果
++++++++++++++++++
更新
++++++++++++++++++
这奏效了。第二遍比第一遍快,因为它忽略了除了涉及 /branch 或 /tags 的提交之外的所有内容。
我正在使用 KDE svn-all-fast-export 将丑陋的 22GB SVN 存储库迁移到 git。老维护者做了一些非常奇怪的分支。我 运行 遇到需要为单个提交创建 2 个分支的情况。
树看起来像这样
trunk
branch/lots-of_branches
tags/lots_of_tags
目前一切顺利...
现在有人创建了一个名为 'new' 的新文件夹,方法是将顶级标签和分支文件夹复制(svn 复制)到 'new' 中。我不确定如何创建顶级分支和标签文件夹以及如何创建子文件夹。
我的规则如下:
match /branch/([^/]+)/
repository myrepo
branch legacy/branch/
end match
match /tags/([^/]+)/
repository myrepo
annotated true
branch refs/tags/legacy/
end match
这导致许多分支称为 legacy/branch/branch_name,但对于上述情况没有 legacy/branch。我的问题是,有没有办法为每个分支创建一个分支,并且还有另一个分支在每次修改分支文件夹时更新?
你可以通过符号引用来中途...
git symbolic-ref refs/heads/legacy-another-foo refs/heads/legacy-foo
请记住,如果您检查引用 git 将不会报告它的符号名称。
所以在 git checkout legacy-another-foo
之后,git status
会报告你在 legacy-foo
你能不能只过滤掉旧文件夹而不导入它?
对不起你的先辈'creative'
在 pure git-svn 的术语中,您可以告诉可以找到标签和分支的多个位置。您将为分支设置 2 个位置(一个在分支中,另一个在 new/branch 中)和两个标签位置(一个在标签中,另一个在 new/tags 中)。
@thekbb 好主意,但我正在努力维护历史。我最近的测试是 运行 当前的规则集,直到它消失,然后重新 运行 导入器使用不同的集来生成顶级引用。
第二套规则:
match /branch/
repository myrepo
branch legacy/branch
end match
match /tags/
repository myrepo
branch legacy/tags
end
之后我会在一次提交后恢复第一组结果
++++++++++++++++++
更新
++++++++++++++++++
这奏效了。第二遍比第一遍快,因为它忽略了除了涉及 /branch 或 /tags 的提交之外的所有内容。