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)
我有自己的研究,但没有从开源中找到一体化的解决方案。有很多单一的“单方面”解决方案,它们没有涵盖 svn 到 git 转换的许多方面,例如:
svn:externalssvn:ignore转换成.gitignoreauthor@<repo-guid>自动 SVN 作者电子邮件转换或预防在不进行转换的情况下继续(例如,GitLab 确实使用帐户邮件来跟踪帐户的回购更改(聚合参与统计数据),并且如果您忘记转换邮件后将拒绝跟踪任何内容)git-svn内容)...等等。
这是一个需要你自己调查或研究的相当大的领域,并且可能会花费很多时间来至少从 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 存储库:
其他第三方项目的一些端口:
svnrdump,但还允许转储子目录,即使您的存储库访问仅限于此子目录)一些独立的有趣的实现:
但仍然存在许多未解决的方面或缺点,例如:
subtree/ submodules/etc 将 SVN 存储库切片为一个 GIT 根存储库,并引用其他小型 GIT 存储库svn:externals为 git 子树(KDE 项目的规则仅支持手动或半自动(正则表达式)转换)如果您决定使用 KDE 转换器,那么您可以编写一个脚本来为每个修订范围准备规则,将其转换为您想要的内容svn:externals。