2009-09-29 80 views
1

免責聲明:如果我一開始就知道git-svn,事情會更簡單。SVN git ...現在git到SVN。如此多的衝突

我在SVN中有一個很大的代碼庫,粗暴地把它放在git中。如果沒有快速,高效的分支,工作生活是非常痛苦的,所以這一切都是在一時之間完成的。我的過程是:

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

現在我完成了我的小分支項目。我能夠在一個乾淨的分支裏「撲滅火災」,並在別人身上發展。太好了。我的分支現在已經合併爲一個,並且我準備好將此代碼恢復到SVN中。

我已經與git-svn現在工作了一些,已經得到了svn回購安裝和提取。但是,就我所能得到的。

假設我的Git分支是「主人」,而我的git - svn的回購是「svnrepo」:

git checkout master 
git rebase svnrepo 

失敗並引發合併衝突的羣衆和錯誤「已經在索引存在」。

git checkout svnrepo 
git rebase master 

不完全相同的方式。

如何保存git歷史記錄並將此代碼恢復爲SVN?

回答

1

我會在您的「svnrepo」分支上執行一系列git cherry-pick操作,以移動「主」分支中的每個相關提交(從最早開始)。櫻桃採摘對於每次提交的祖先來說基本上是不可知的,並且將嘗試應用該補丁而不關心它來自哪裏。完成挑選所有提交後,使用git svn dcommit將它們提交給Subversion。

請注意,如果您在「主」分支上有任何非線性歷史記錄,您需要在將代碼重新提交到Subversion之前嘗試將其平滑化。這可能需要一些額外的工作,但由於Subversion不支持非線性歷史記錄,這幾乎是一個必需的步驟。