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

5

从带有svn externals的svn迁移到git。 每个svn externals可能有自己的svn:externals。我没有找到有用的指南来指导如何将带externals的svn迁移到git。 每个分支可能都有自己的branches tags trunk。 迁移整个仓库的最佳方法是什么? 我正在考虑使用主仓库的git svn clone,添加每个外部克隆的git子模块。但由于这些外部嵌套,我不知道什么是最佳解决方案。 目前使用的脚本:

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

转换 SVN 为 Git 仓库的指南:http://patrickbougie.com/2013/03/18/convert-svn-to-git-repository/ - Marco Savo
脚本使用说明请参考 https://github.com/nirvdrum/svn2git - Marco Savo
2
不,这里我在询问 svn:externals。 - Marco Savo
1个回答

2
我自己进行了研究,但没有找到一个开源的一站式解决方案。有很多单独的“单面”解决方案,它们并没有涵盖许多svn-to-git转换方面,例如:
  • svn:externals
  • svn:ignore 转换为 .gitignore
  • 自动将SVN作者电子邮件转换或防止在没有转换的情况下继续(例如,GitLab使用帐户邮件跟踪存储库更改(聚合参与统计)的帐户,并且如果您忘记从author@<repo-guid>转换邮件后,将拒绝跟踪任何内容git-svn工具)
  • svn标签/分支转换为本机git标签/分支
  • 处理转换冲突或无法转换
  • 处理双向转换(git-2-svn)
  • 处理转换恢复(在提交到svn / git存储库之一后)
  • 处理无法访问裸仓库或无法访问SVN仓库根目录
  • 处理手动转换启动/恢复(通过脚本或可执行文件),而不是作为独立服务或反之亦然
  • 支持从/到流行的svn / git中枢(如sourceforge、github、gitlab、bitbucket)的转换

...等等。

这是一个非常大的领域,需要自己调查或研究,花费很多时间才能找出您实际上需要或想要的svn-to-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/等,将SVN repo切片成一个GIT根repo,并引用其他小的GIT repos
  • svn:externals自动转换为git subtrees(KDE项目的规则仅支持手动或半自动(正则表达式)转换)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接