git - 将巨大的 SVN 存储库迁移到 GIT,并且 SVN 存储库上的冻结时间最短
问题描述
我正在从事一个已经运行了一段时间的项目。它托管在 SVN 上。它有 24K 次修订。组织中的某个人认为(我同意)如果我们可以将组织中的所有项目从 SVN 迁移到 GIT,那就太好了。说起来容易做起来难。我们的项目对维持库存非常关键,预计下个季度投产。迁移的时间表设置为 12 月底。这意味着我们既没有等待时间,也没有冻结 SVN 存储库的奢侈。我决定采取以下方法:
- 使用 .创建当前存储库的转储
svnrdump
。这花了大约 3 小时。 - 将转储加载到本地
svn
存储库。这花了大约 12 小时。 - 将本地
svn
存储库转换为git
使用git svn clone
. 这需要超过 73 小时。 git
将此存储库推送到remote
.
现在,在执行这些步骤的同时,对现有的远程存储库进行了一些新的提交SVN
。有没有办法,我可以将这些新更改合并到新的远程git
存储库中。值得注意的是,我们希望保留所有来自 SVN 的提交历史。如果有办法做到这一点,那就意味着我们只需要冻结当前的远程 SVN 几个小时。我还想提一下,我们的新git
存储库托管在gitlab
. 有没有更好的方法来做到这一点?
解决方案
考虑 和 之间的差异svnrdump
,svndump
首先检查本地完成(直接在服务器上)svndump
(如果您确实可以访问所述服务器)不会更快。
然后,对于同时创建的少数提交/修订,您可以执行svnrdump --incremental
.
仅将修订版或修订版范围转储为与先前修订版的差异,而不是默认值,默认值是转储修订版范围的开始,并完全扩展了该修订版的存储库的所有内容。
您可以将其转换为它自己的 Git 存储库,将其提取到您当前的 Git 存储库中,然后在您的正常 Git 分支之上重新选择孤儿分支,以保留历史记录。(请参见此处的示例)
推荐阅读
- python - 将 Keras 情感分析模型部署到 Flask 时的不同数据形状
- java - 使用 Gradle 运行单元测试时,最大堆大小在哪里设置?
- angular - Angular + Ng2 图表:图表未显示为子组件
- javascript - 输入命令后如何删除消息?
- postgresql - 在 PostgreSQL 中将实际的字符串和字符转换为数字
- spring - 子表在 JPA 中的 OneToMany 关系中没有映射
- php - 获取数据失败
- javascript - 在 API 调用完成之前快速解析路由
- java - Java ServiceLoaders、Tomcat、Apache CXF 和 Metro
- python-3.x - Pinterest 广告 API v3 - 代码 401 授权错误