解决 Eclipse SVN 插件(Subversive)内存不足的问题

2010-08-21

最近的一个项目有点夸张,SVN 上的源代码量超过 1GB(事实上是出于种种原因,将很多第三方 jar 之类提交到了 SVN 上)。项目初创到不断壮大的过程中,持续参与的开发人员并没有发现什么问题。但后期新加入的开发人员则发现使用 Eclipse SVN 插件(Subversive)无法完成从无到有的 Check out 操作,Eclipse 总是出现 Java heap space 错误。这很可能是由于 Subversive 实现的问题,在处理庞大的代码库时将堆内存耗尽。根据经验,我们可以修改 eclipse.ini 中的 Java 内存限制,但部分开发人员发现在自己的机器上即使修改到极限,Subversive 仍会报错。于是只能另想办法。

经测试,在命令行下使用 svn co 是可以正常 Check out 该项目的。但如果把 Check out 出来的项目 Import 到 Eclipse 中,则会发现其缺少 SVN 的相关属性,看不到 Subversive 的上下文菜单。经查,项目的属性并不在项目目录中,而保存在 [WORKSPACE]/.metadata/.plugins/org.eclipse.core.resources/.projects/[PROJECT]/.indexes/properties.index 文件中,这个文件是文本与二进制夹杂的,不便理解与编辑,因此不太容易通过它来添加 SVN 属性。

最后,我们找到了以下可行的操作路径:

1、在 Eclipse 中 Check out 项目,Check Out As 对话框的 Depth 选项选择 Only a folder,目标目录为假设 A,完成后关闭 Eclipse;

2、使用 svn co 命令把项目 Check out 到另一个目录,假设为 B;

3、把 A 改名为 C;把 B 改名为 A;把 C 中的 .project 复制到 B(因为 .project 通常在 SVN 的 ignore 列表中)。

4、打开 Eclipse,刷新 A 项目目录。

这时,带有 SVN 属性的项目就完整地出现在 Eclipse 中了。

我不是专业 Java 开发人员或专业 Eclipse 用户,因此并不知有没有更好的解决方案。但这也从一个侧面反映了代码管理中存在的问题。另外,负载规模的增长导致 Subversive 内存耗尽,也反映出 Subversive 实现的不周。有兴趣的朋友不妨去帮 Subversive 修正这个 bug。