Subgit迁移14.4k提交的SVN仓库时卡在版本转Git提交99%求助
结合你在Windows环境下迁移12年历史、14.4k次提交的SVN仓库场景,我帮你梳理下可能导致卡住的原因和对应的解决办法:
1. 优先排查网络/SVN服务器性能问题
你当前直接连接远程SVN服务器,大仓库的首次提交转换很容易受网络波动或SVN服务器响应慢影响。建议先把ProjectA的SVN仓库本地镜像一份:
svn checkout http://<URL>/collectionOfRepositories/Repository1/ProjectA/ C:\local-svn-mirror
然后用本地路径作为--svn-url重新执行迁移命令,避开网络干扰:
./subgit.bat import --svn-url file:///C:/local-svn-mirror C:\Project1-subgit --default-domain unknownUser.com --minimal-revision 14300 --authors-file authors.txt -T trunk -b branches -t tags --username myUsername
2. 调整Subgit的JVM内存配置
Subgit基于Java运行,默认内存配额不足以处理大仓库的提交转换。你可以修改subgit.bat文件里的JVM参数:
找到类似set JAVA_OPTS=-Xmx512m的行,改成更大的内存分配(比如根据你的机器内存设置为4G):
set JAVA_OPTS=-Xmx4g -Xms2g
保存后重新执行迁移命令,给Subgit足够的内存处理大提交。
3. 排除不必要的shelving目录干扰
你的SVN结构里包含shelving目录,虽然指定了trunk/branches/tags,但Subgit可能仍会扫描整个目录树。如果shelving里有大量未完成的变更或大文件,会拖慢转换速度甚至卡住。可以在命令里明确排除该目录:
./subgit.bat import --svn-url http://<URL>/collectionOfRepositories/Repository1/ProjectA/ C:\Project1-subgit --default-domain unknownUser.com --minimal-revision 14300 --authors-file authors.txt -T trunk -b branches -t tags --exclude shelving --username myUsername
4. 验证--minimal-revision参数的合理性
你指定了从r14300开始迁移,但要确认这个版本确实是ProjectA相关的起始版本。如果该版本包含跨目录的大量变更,或者SVN版本号是整个大仓库的全局编号(而非ProjectA独立的),可能会导致转换逻辑卡住。可以先去掉--minimal-revision参数,尝试从最早版本开始迁移(虽然耗时更长,但能排查是否是版本号设置的问题),或者先用SVN命令验证该版本的内容:
svn log -r14300 http://<URL>/collectionOfRepositories/Repository1/ProjectA/
5. 检查Windows文件系统权限
确保C:\Project1-subgit目录的权限足够,当前用户拥有完全读写权限。可以右键以管理员身份打开命令行窗口,再执行Subgit迁移命令,避免UAC权限限制导致的写入阻塞。
内容的提问来源于stack exchange,提问作者Amon

