svn使用嵌套的svn:externals进行git迁移

时间:2017-03-14 18:18:00

标签: git-svn git-submodules git-subtree svn-externals git-subrepo

使用svn externals从svn迁移到git。 每个svn外部都可以拥有它自己的svn:externals。没有指南如何将svn与externals迁移到git这里我觉得很有用。 每个分支可以拥有它自己的分支标签主干。 迁移整个存储库的最佳方法是什么? 我正在寻找主存储库的git svn clone,添加git子模块,每个外部克隆也是如此。但由于外部是嵌套的,我不知道什么是最好的解决方案。 到目前为止使用的脚本:

https://github.com/eneroth/git-externals
https://github.com/eneroth/git-externals

1 个答案:

答案 0 :(得分:0)

我有自己的研究,但没有从开源中找到一种多合一的解决方案。有很多单一的“单面”解决方案不能涵盖svn到git转换的许多方面,例如:

  • svn:externals
  • svn:ignore转换为.gitignore
  • 自动SVN作者通过电子邮件发送转换或预防措施,以继续进行而不进行转换(例如,GitLab确实使用帐户邮件来跟踪帐户的回购更改(汇总参与统计信息),并且如果您忘记转换邮件来源,将拒绝跟踪任何内容author@<repo-guid>工具之后的git-svn
  • svn标签/分支转换为本地git标签/分支
  • 处理转换冲突或无法转换
  • 处理2路转换(git-2-svn)
  • 处理转换恢复(在提交到svn / git存储库之一之后)
  • 无法访问裸存储库或无法访问SVN存储库根的处理
  • (通过脚本或可执行文件)处理手动转换的开始/恢复,而不是作为独立服务,反之亦然
  • 支持从/转换为流行的svn / git集线器,例如sourceforge,github,gitlab,bitbucket

...等等。

这是一个很大的领域,需要您自己进行调查或研究,并且可能会花费大量时间至少从svn转换为git或进行任何转换中找出您实际需要或想要的东西。

对于我自己,我发现它与我想要的东西非常接近: https://techbase.kde.org/Projects/MoveToGit/UsingSvn2Git

规则文件示例: https://cgit.kde.org/kde-ruleset.git/tree/kde-rules-main

帐户映射示例: https://cgit.kde.org/kde-ruleset.git/tree/account-map

要从本地裸git存储库(由KDE工具生成)打包/推送到远程git存储库的脚本示例: https://phabricator.wikimedia.org/diffusion/OSOF/browse/master/svn2git/scripts

第三方项目在切片SVN存储库之前对其进行扫描:

一些通往其他第三方项目的港口:

一些独立的有趣实现:

但是,仍然有许多未解决的方面或缺点,例如:

  • 支持git subtree / submodules / etc / etc将SVN存储库切片为一个GIT根存储库,并引用其他小型GIT存储库。
  • svn:externals自动转换为git子树(KDE项目的规则确实仅支持手动或半自动(正则表达式)转换)

如果决定使用KDE转换器,则可以编写脚本来为要从svn:externals转换为想要的每个修订范围准备规则。