执行git svn clone超大SVN仓库反复崩溃,有什么可行的解决方法?
根因说明
你遇到的连接中断报错是内存溢出的衍生异常,git-svn依赖Perl进程运行,拉取超大SVN仓库全量历史时会将所有提交元数据预加载到内存,超出Perl进程的内存上限后进程崩溃,直接打断正在运行的网络请求,因此调整Apache超时阈值不会生效。
可行解决方案
- 分阶段拉取提交历史
不要一次性拉取全量历史,先指定较新的起始提交号拉取基础版本,再逐步增量追加。可以先用SVN命令查询仓库提交范围,首次拉取执行:
后续每次执行增量拉取即可,避免单次操作内存占用过高:git svn clone -r <起始提交号>:<起始提交号+1000> <SVN仓库地址>git svn fetch -r <上次拉取结束的提交号>:HEAD - 调整运行环境与内存限制
Windows原生Git的Perl进程基于MinGW/Cygwin运行,默认内存上限较低,建议换用WSL2环境执行迁移操作。操作前可手动调高Perl内存上限:
数值根据你的设备物理内存调整,建议不超过物理内存的70%。# Linux/WSL2环境执行 export PERL_MEMORY_LIMIT=8192M - 按目录拆分克隆
如果原SVN仓库根目录下包含多个独立业务模块,不要一次性拉取整个根目录,按独立目录拆分迁移,从根源上降低单次操作的数据量。 - 替换迁移工具
如果git-svn始终无法支撑大仓库迁移,可以换用优化版svn2git工具,或直接使用代码托管平台内置的SVN导入功能,这类工具底层对大仓库的内存管理优化更好,能避免Perl进程的内存溢出问题。
内容的提问来源于stack exchange,提问作者AxD
相关产品推荐
相关产品推荐

