在32位Windows XP下尝试使用Subversion 1.6.9执行命令行svn merge
时,我们看到以下错误。
内存不足 – 终止应用程序。
这个应用程序已经请求运行时以不寻常的方式终止它。 请联系应用程序的支持团队获取更多信息。
在这个时候检查Windows任务pipe理器会显示以下内存使用情况
svn.exe
进程的峰值内存使用率超过svn.exe
。
顺便说一句,当试图使用TortoiseSVN执行合并时,我们会得到相同的结果。
我们正试图从我们的仓库的根级执行合并。 存储库的总文件大小(在开发人员计算机上)大约为3GB。
这是我们第一次尝试根级合并。 我们是否遇到内部svn限制?
经过一些反复试验,我发现这个问题似乎是由我们的仓库中的一个特定的文件夹造成的。 该文件夹包含1,500个SQL脚本。 在这个文件夹上执行合并会导致相同的内存不足错误(尽pipe需要更长的时间才能完成)。
我们能够解决这个问题,但我们仍然不明白事业的确切性质。
正如我的文章编辑所述,我们追踪到一个包含大约1500个SQL脚本的文件夹。 这个文件夹也有一个svn:externals
一个文件的svn:externals
。
我们执行了以下步骤:
svn:externals
并做了svn commit svn update
) svn update
当我们下一次尝试一个svn merge
命令成功完成。
考虑到终端之前的内存使用情况(〜1.8GB),以及您使用32位Windows(每个进程有2GB内存限制)的事实,建议您尝试在64位计算机上进行合并。
如果你没有可用的64位机器,可以尝试把它分解成更小的合并(除非你正在重新集成一个分支,那么我不知道你是如何分割它的)。
我已经处理了3GB的工作副本和大量的合并(总是从分支的根源) – 我从来没有遇到过内存问题,但我也一直在64位。 可以想象,将分支合并进行大量的修改可能需要大量的内存,但我只是在猜测。
我建议发布到subversion邮件列表,快速搜索告诉我你已经有了:)我怀疑他们会确认你需要更多的内存来做一个大的合并,因为这个版本库的大小,但是也有可能是其他的东西上。
单独的建议:搜索邮件列表类似的问题。
我发现了一个关于太多mergeinfo属性的线程,导致内存使用增加 。 如果你以前从未从根合并过,我认为你有很多mergeinfos。
更新:了解svn:mergeinfos是很重要的。 谨慎操作时不要理解。 在理查德的情况下,版本库从来没有从分支根目录合并,这意味着在根目录下的svn:mergeinfo可能不包含任何东西,所以全部删除它们将删除svn关于之前合并的知识。 在进行完整的分支合并时(例如,svn merge url / to / src / branch – 没有指定修订版本),这一点很重要,并且可能会导致subversion尝试重新合并之前合并的修订版本。 樱桃选择合并(即指定修订x,y,z)不应受到影响。 即使它被全部删除了,它不是世界的尽头,只是你会有一个类似于整个分支合并的行为,在这个时间点之前涉及分支。
这就是说,我不得不多次清理多余的子树mergeinfos,而不是从根目录。
Mergeinfo推荐阅读:
您是否在64位Windows上运行64位版本的SubVersion?
如果不是,请记住在Windows中限制内存大小。 你被限制在3GB的流程使用,所以这可能是你打的限制。
顺便说一句,最新的TortoiseSVN是1.6.13