2016-09-21 103 views
-1

我有一個相當大的svn庫有結構類似下面。我在一個大項目中有多個存儲庫/項目。我一直在建立svn2git轉移SVN與git,但好像我有一個做的每一個項目之一。有沒有一種更容易/更自動的方式將此svn庫回遷到git?我想確保我把提交歷史等轉換SVN回購與git

我不能完全肯定,如果這個命令會把每一個「項目」到它自己的文件夾:svn2git https://my_repo/svn/my_repository

的一個問題,我可以看到是這些項目文件夾中的一些沒有遵循傳統的主幹和標籤結構。任何想法如何我可以實現這一點?

my_repository 
    project1 
      trunk 
       ... 
      tags 
       1.0.0 
       1.0.1 
       1.0.2 

    project2 
      trunk 
       ... 
      tags 
       1.0.5 
       1.0.6 
       1.0.7 

     project3 
      src 
       ... 
      file1 
      file2 

     project4 
      trunk 
       ... 
      tags 
       1.0.5 
       1.0.6 
       1.0.7 

回答

1

有所謂svn2git pleny工具中,可能最好的一個是KDE一個從https://github.com/svn-all-fast-export/svn2git。我強烈建議使用svn2git工具。這是我知道可以在那裏最好的,它是你可以用它的規則文件做什麼非常靈活。

從你的問題我看你是不是用這個svn2git,但是這是基於git-svn紅寶石一個是的倉庫或儲存庫零件的一次性轉換的工具。這是一個偉大的工具,如果你想使用Git的作爲前端爲現有的SVN服務器,但對於一次性轉換,你應該使用git-svn

如果您不是100%關於存儲庫的歷史記錄,svneverever from http://blog.hartwork.org/?p=763是一個很好的工具,用於在將SVN存儲庫遷移到Git時調查SVN存儲庫的歷史。

您可以輕鬆地與它的規則文件配置工具,讓你想要什麼,包括differeing佈局項目和分裂你的SVN根成多個Git倉庫,只要你喜歡。


即使混帳SVN比較容易下手,這裏有一些進一步的原因,使用KDE svn2git而不是git-svn優越,除了它的靈活性:

  • 歷史重建要好得多和更清潔的svn2git(如果使用正確的),這是更復雜的分支和合並的歷史尤其如此
  • 標籤是真正的標籤,而不是Git分支
  • git-svn標籤包含一個額外的空提交這也使得分支機構他們不要的部分,所以直到你給--tags的命令,默認情況下只標記指向獲取分支還端來一正常fetch不會得到他們。有了正確的svn2git標籤是屬於他們的地方
  • ,如果你在SVN改變佈局,可以輕鬆地與svn2git配置此,與git-svn你將失去​​歷史最終
  • svn2git你也可以拆分一個SVN倉庫分成多個Git倉庫容易
  • 或結合在相同的SVN根多個SVN儲存庫到一個Git倉庫容易
  • 轉換是用正確的svn2git速度比與極大數倍git-svn

爲什麼git-svn更糟,KDE svn2git優於其他原因。 :-)