[英]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=763的svneverever
是一個很好的工具,可以在將 SVN 存儲庫遷移到 Git 時調查它的歷史記錄。
盡管git-svn
(或者在你的情況下是錯誤的svn2git
)更容易開始,但除了它的靈活性之外,這里還有一些為什么使用 KDE svn2git
而不是git-svn
更優越的原因:
svn2git
重建得更好更干凈(如果使用了正確的),對於具有分支和合並等的更復雜的歷史尤其如此git-svn
時,標簽包含一個額外的空提交,這也使它們不屬於分支,因此在您向命令提供--tags
之前,正常的fetch
不會獲取它們,因為默認情況下,也只獲取指向獲取的分支的標簽. 使用適當的 svn2git 標簽是它們所屬的位置svn2git
輕松配置它,使用git-svn
最終您將丟失歷史記錄svn2git
,您還可以輕松地將一個 SVN 存儲庫拆分為多個 Git 存儲庫svn2git
的轉換比使用git-svn
快了無數倍 git-svn
更差而 KDE svn2git
更優越的原因有很多。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.