5

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

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

1 回答 1

2

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

  • svn:externals
  • svn:ignore转换成.gitignore
  • 自动 SVN 作者电子邮件转换或防止在没有转换的情况下继续(例如,GitLab 确实使用帐户邮件来跟踪帐户的回购更改(汇总参与统计),并且如果您忘记在工具author@<repo-guid>之后转换邮件,将拒绝跟踪任何内容git-svn)
  • svn 标签/分支转换为原生 git 标签/分支
  • 处理转换冲突或无法转换
  • 处理 2 向转换 (git-2-svn)
  • 处理转换恢复(在提交到 svn/git repos 之一之后)
  • 在无法访问裸存储库或不访问 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// submodulesetc 将 SVN repo 分割成一个 GIT 根 repo 并引用其他小型 GIT repos
  • 自动转换svn:externals为 git 子树(KDE 项目的规则只支持手动或半自动(正则表达式)转换)

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

于 2019-06-18T12:49:27.900 回答