1

免责声明:如果我一开始就知道,事情会更简单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?

4

1 回答 1

1

我会在您的“svnrepo”分支上执行一系列git cherry-pick操作,以从“主”分支(从最旧的分支开始)移动每个相关提交。樱桃采摘在很大程度上与每次提交的祖先无关,并且会尝试应用补丁而不关心它来自哪里。一旦你完成了所有提交的挑选,使用git svn dcommit将它们提交到 Subversion。

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

于 2009-10-09T08:07:01.753 回答