我已将一个旧的cvs代码库(大约13GB)迁移到git(大约2.7GB)。但是我无法在我的32位工作站上克隆该存储库。我遇到了内存不足错误(malloc未能分配大约6 MB的空间)。有没有可能解决这个问题?
remote: counting objects: 1227276, done.
remote: Compressing objects: 100% (217540/217540), done.
Receiving objects: 100% (1227276/1227276), 2,66GiB | 791.00KiB/s, done.
remote: Total 1227276 (delta 787852), reused 1227276 (delta 787852)
Resolving deltas: 100% (787852(787852), done.
fatal: Out of memory, malloc failed (tried to allocate 6838754 bytes)
fatal: remote did not send all necessary objects
服务器:Rhel63 64位; 工作站:Win XP 32位,2GB RAM; Git版本:1.8.3.4(两个系统上都是)。
更新1:现在我已经将服务器上2.8GB的打包文件重新打包成500MB大小的文件。但在客户端,克隆操作并没有受到影响。它仍然只创建一个2.8GB的大型打包文件。如何让git克隆进程使用较小的打包文件或者按照服务器上的方式创建打包文件呢?对我来说,一个有趣的方面是:接收到对象的大小减小到了1.5GB。
更新2:经过一些调查和分析,现在我认为主要问题是git克隆过程无法处理我32位工作站上的单个大型打包文件。但是我该如何配置克隆过程以便获得大小更小的多个打包文件呢?在服务器端,使用
repack
命令很好用,但对客户端没有影响。更新3:现在我有一个1.1GB大小的裸git repo(通过使用
git gc --aggressive --prune=now
)。但内存不足错误仍然存在。所以我尝试将repo拆分。我使用git rm
与git commit -a
完成。因此,两个新的裸repo的大小等于旧的中心repo。但现在从工作站克隆却可以正常进行。内存消耗现在保持在<300MB。之前这个数字不断增加。现在我的问题是:为什么克隆过程没有出现问题了呢?