2013-10-02 208 views
5

我有一個項目需要將Git存儲庫移植到SVN。 我嘗試了幾種在線發佈的方式,但沒有一個適合我。 如果有人可以幫忙,它會非常感激。從Git遷移到SVN

我也跟着上

  • 指導克隆一個Git回購的工作副本
  • 進入副本
  • 倒帶頭到第一次提交
  • 採摘櫻桃的所有提交
  • 正在做git svn rebasegit svn dcommit

這個方法的問題是我的Git倉庫有一個複雜的歷史。 有許多分支和合並。 當我做櫻桃採摘時,它只回收最終存儲庫的一部分。

問:有沒有辦法避免採摘櫻桃和git svn rebase? 也許用別的東西代替它吧?

我跟着這個網絡發帖:Migrate a Git repo to an svn one

這篇文章基本上是

  • 沒有git svn clone
  • 獲取的克隆工作副本git的回購
  • 支師傅old_master
  • 將所有從old_master提交給主設備的提交(git svn rebase
  • 沒有git dcommit

這種方法的問題是類似於我在第一個: 當我做git svn rebase,也有很多的衝突。 另外,當我跳過所有衝突時,git dcommit失敗。 它告訴我:Unable to determine upstream svn information from HEAD history.

我不能告訴還有什麼要嘗試從這一點上。 如果您發現我做錯了任何事情或有其他方法可以做,請給出建議。 讚賞它!

回答

3

我想你別無選擇,只能要寬鬆一些你的git的歷史 - SVN無法處理這麼多的信息。

我唯一想到的問題是,將問題委託給第三方,將利用GitHub's SVN support來緩解您的任務。

我建議你真的認爲,如果你需要保持你的歷史,或者它需要多麼完整。基於此,我只是將衝突提交(或單個提交中的整個歷史記錄)壓扁/重新綁定並從此開始。

叉可以和你在一起!

+0

這太棒了!一些非常簡單並且適合我所有需求的東西!非常感謝! – curlingbunny

+0

因爲SVN可以處理那麼多的信息,實際上可以處理比Git更多的信息,因此被低估。主要的問題是Git不會跟蹤重命名和移動。因此,遷移可能很複雜。 – bahrep

+0

Git檢測重命名而不是堅持與提交的操作,所以無論你使用git mv或只是一個普通的mv並不重要。 http://stackoverflow.com/questions/2314652/is-it-possible-to-move-rename-files-in-git-and-maintain-their-history/13544573 – dev

1

那麼,你必須看看this question。最好的答案是:

做轉換這個方向的一般問題是,Git存儲庫可以包含不僅僅是一個線性歷史的修訂,如Subversion所期望的。具有不同歷史和頻繁合併提交的多個祖先都是可能的,這在Subversion存儲庫中很難表現出來。

對於在Git存儲庫中確實存在線性歷史記錄的簡單情況,可以使用git-svn dcommit將該批次推送到空的Subversion存儲庫。

此致敬禮。