簡體   English   中英

將大型 SVN 存儲庫遷移到 Git 失敗內存不足異常

[英]Migrating large SVN repo to Git failing Out of Memory Exception

我正在嘗試對一個非常大的 SVN 存儲庫進行 git svn 克隆。 我已經使用git svn clone完成了早期的遷移,並保留了完整的分支、標簽和歷史記錄,一切進展順利。 但是這次運行一段時間后的腳本拋出錯誤:

libsvn: Out of memory - terminating application.18 [main] perl 13884 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump

我到處研究,但找不到與此相關的任何內容。 如果有人遇到類似的錯誤,我將不勝感激任何建議。

git-svn不是一次性轉換存儲庫的正確工具。 如果你想使用 Git 作為現有 SVN 服務器的前端,這是一個很好的工具,但是對於一次性轉換你應該使用git-svn ,但是svn2git更適合這個用例並且不應該受到影響OOM 錯誤。

有很多名為svn2git的工具,最好的可能是來自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。 我強烈推薦使用那個svn2git工具。 它是我所知道的最好的可用工具,而且您可以非常靈活地使用其規則文件進行操作。

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


盡管git-svn (或者在你的情況下是錯誤的svn2git )更容易開始,但除了它的靈活性之外,這里還有一些為什么使用 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更優越的原因有很多。 :-)

暫無
暫無

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

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