svn 到带有嵌套 svn:externals 的 git 迁移

Mar*_*avo 5 git-svn svn-externals git-submodules git-subtree git-subrepo

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

https://github.com/eneroth/git-externals
https://github.com/eneroth/git-externals
Run Code Online (Sandbox Code Playgroud)

And*_*dry 2

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

  • svn:externals
  • svn:ignore转换成.gitignore
  • author@<repo-guid>自动 SVN 作者电子邮件转换或预防在不进行转换的情况下继续(例如,GitLab 确实使用帐户邮件来跟踪帐户的回购更改(聚合参与统计数据),并且如果您忘记转换邮件后将拒绝跟踪任何内容)git-svn内容)
  • svn 标签/分支转换为本机 git 标签/分支
  • 处理转换冲突或无法转换
  • 处理双向转换 (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 将 SVN 存储库切片为一个 GIT 根存储库,并引用其他小型 GIT 存储库
  • 自动转换svn:externals为 git 子树(KDE 项目的规则仅支持手动或半自动(正则表达式)转换)

如果您决定使用 KDE 转换器,那么您可以编写一个脚本来为每个修订范围准备规则,将其转换为您想要的内容svn:externals