2017-02-14 42 views
0

在大型項目中使用svn。我可以毫無問題地檢查項目的主幹。它需要30分鐘/ 1小時。我這樣做:git svn永遠需要,svn需要一個小時

svn checkout https://myrepo.com:port/svn/trunk/ 

但如果我嘗試使用git,它需要永遠。我一直在做git svn fetch,因爲我在閱讀類似問題的一些答案時得到了錯誤,但是沒有收到錯誤。我使用的命令是

git svn clone https://myrepo.com:port/svn/trunk/ 

問題(我認爲)是Git是試圖克隆一切(所有分行),加上我不想其他的東西。在目錄svn上,有主幹和分支,還有其他我不需要的目錄。我只想要樹幹。

這是正常的行爲?

回答

2

使用您的命令,它只會複製中繼,因爲您指定了中繼網址。但它仍然克隆了整個歷史,一個接一個地完成所有修訂,然後讓Git完成它。這需要很長時間,特別是如果你不在服務器上的SVN存儲庫位於文件系統上。這是我勸阻使用git-svngit-svn的一次性遷移工具的原因之一。

您可以使用參數--revisiongit svn clone只導入歷史記錄的一部分,例如, G。最後10次提交。

+0

'git svn init'也知道'--ignore-paths'命令行選項可能有幫助。 – kostix

1

git svn clone明顯變慢,主要是因爲它不是存儲庫。

注意:請記住爲遷移生成作者文件。

這些額外的措施將加快SVN→git的遷移過程:

  1. git svn clone https://myrepo.com:port/svn/ --stdlayout <deleteMe.git>與像--ignore-paths,什麼不是所有額外的參數。
  2. 然後取消步驟1中的git svn clone操作,只是爲了稍後使用.git/config文件。
  3. git init --bare <useMe.git>
  4. 替換與<deleteMe.git>.git/config<useMe.git>/config從步驟1(因爲它是一個回購)
  5. 編輯<useMe.git>/config改變bare = falsebare = true
  6. cd <useMe.git>
  7. 現在,做git svn fetch並注意提高速度。
  8. 當抓取完成後,無論是混帳與git clone <useMe.git> <newNonBare.git>
  9. 或者一個git的遠程添加到<useMe.git>和推到它克隆出來,說給當地GitLab服務器項目。

注意:爲了達到最佳的git svn clone/fetch速度,本地複製svn庫,並從中Svnserve的它,然後git svn clone。但是這種方法需要你使用這個參數--rewrite-root,這樣你的克隆git倉庫才能在註釋中保留原始的svn URL。

希望有所幫助。