SVN to git ...现在git到SVN。这么多冲突

时间:2009-09-29 21:51:54

标签: svn git rebase

免责声明:如果我在开始时了解git-svn,情况会更简单。

我在SVN中有一个很大的代码库,粗略地把它放在git中。没有快速,有效的分支,工作生活非常痛苦,所以这一切都是在一点点匆忙中完成的。我的流程是:

svn export
git init .
git add .
git commit -a -m "initial commit"

现在我完成了我的小型分支项目。我能够在一个干净的分支中“灭火”并在其他人身上进行开发。太棒了。我的分支现在都合并为一个,我已经准备好将这些代码恢复到SVN。

我现在已经与git-svn进行了一些工作,获得了svn repo设置并获取了。但这就是我能得到的。

假设我的git分支是“master”,我的git-svn repo是“svnrepo”:

git checkout master
git rebase svnrepo

失败并引发大量合并冲突并且“已存在于索引中”错误。

git checkout svnrepo
git rebase master

以完全相同的方式失败。

如何保留git历史记录并将此代码恢复为SVN?

1 个答案:

答案 0 :(得分:1)

我会在你的“svnrepo”分支上执行一系列git cherry-pick操作,以便从“master”分支移动每个相关的提交(从最旧的分支开始)。对于每个提交的祖先来说,Cherry pick很大程度上是不可知的,并且会尝试应用补丁,而不用担心它来自哪里。完成所有提交后,使用git svn dcommit将它们提交给Subversion。

请注意,如果“master”分支上有任何非线性历史记录,那么在将代码推送回Subversion之前,您需要尝试将其展平。这可能需要一些额外的工作,但由于Subversion不支持非线性历史,所以这几乎是必需的步骤。