从Git迁移到SVN

12

我有一个项目需要将Git存储库移植到SVN。 我尝试了网上发布的几种方法,但没有一种适合我。 如果有人能帮忙,我会非常感激。

我遵循了这篇指南:

  • 克隆Git repo以便获得工作副本
  • 进入副本
  • 将Head退回到第一个提交
  • 挑选所有提交
  • 执行git svn rebasegit svn dcommit

这种方法的问题是我的Git存储库具有复杂的历史记录。 有许多分支和合并。 当我进行挑选时,它只挑选回最终存储库的一部分。

问题:有没有办法避免挑选和git svn rebase?也许用其他东西替换它?

我遵循了此网络文章:将Git repo迁移到svn

此文章基本上:

  • 执行git svn clone
  • 在克隆的工作副本中获取git repo
  • 将主分支分支到旧主分支
  • 将所有提交从旧主分支应用到主分支(git svn rebase
  • 执行git dcommit

这种方法的问题类似于我在第一种方法中遇到的问题:当我执行git svn rebase时,会有许多冲突。 同样,当我跳过所有冲突时,git dcommit失败了。 它告诉我:无法确定HEAD历史记录中的上游svn信息。

从这个点开始,我不知道还能尝试什么。 如果您注意到我做错了什么或有其他方法,请提出任何建议。谢谢!

2个回答

6

我想你别无选择,只能丢失一部分的git历史记录——SVN处理不了这么多信息。

唯一的解决办法是委托第三方来解决问题,利用GitHub对SVN的支持来简化您的任务。

我建议您认真思考是否需要保留您的历史记录,或者它需要多完整。基于此,我会压缩/重新整理有冲突的提交(或整个历史记录),然后从那里开始。

祝您好运!


这太棒了!非常简单,完全符合我的需求!!非常感谢你! - curlingbunny
1
因为SVN可以处理大量信息,实际上比Git可以处理更多的信息,所以被downvote了。主要问题是Git根本不跟踪重命名和移动。因此,迁移可能会很复杂。 - bahrep
Git检测重命名而不是将操作与提交一起持久化,因此无论您使用git mv还是普通的mv都没有关系。https://dev59.com/4XE95IYBdhLWcg3wbtXO#13544573 - Dev

2

嗯,您需要看一下这个问题。最佳答案如下:

在进行此类转换时的一般问题是Git存储库可以包含不仅是线性修订历史记录,而且是Subversion所期望的内容。多个祖先具有不同的历史记录和频繁的合并提交都是可能的,这在Subversion存储库中无法轻松表示。

对于您的Git存储库中具有线性历史记录的简单情况,您可以使用git-svn dcommit将其全部推送到一个否则为空的Subversion存储库。

最好的问候。


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