簡體   English   中英

將 SVN 倉庫轉換為 git

[英]Converting SVN repo to git

我有一個非常大的 svn 存儲庫,其結構類似於下面。 我在一個大項目中有多個存儲庫/項目。 我一直在設置svn2git,把svn轉git,但是好像每個項目都要一個一個的做。 有沒有更簡單/更自動的方法來將此 svn repo 移動到 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

有很多工具叫做svn2git ,最好的一個可能是來自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。 我強烈推薦使用那個svn2git工具。 這是我所知道的最好的,而且它的規則文件非常靈活。

從你的問題我看到你沒有使用這個svn2git ,而是基於git-svn的 ruby​​ ,它不是一次性轉換存儲庫或存儲庫部分的正確工具。 這是一個偉大的工具,如果你想使用Git的作為前端為現有的SVN服務器,但對於一次性轉換,你應該使用git-svn

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

您可以使用它的規則文件輕松配置該工具,以完全滿足您的需求,包括項目的不同布局以及將您的 SVN 根目錄拆分為多個 Git 存儲庫。


盡管 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快上無svn2git

git-svn更差而 KDE svn2git更優的原因有很多。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM