当我从项目的裸存储库执行 git clone 时,在本地服务器上收到以下错误消息:
致命:内存不足,malloc失败(试图分配2251896833 bytes)警告:克隆成功,但结帐失败。你可以检查 用'git status'检查了什么,然后重试结帐 'git checkout -f HEAD'
我尝试按照this question下的回答更新我的~/.gitconfig
文件,关闭git bash,重新启动并重试,但没有任何结果。
我最终尝试了以下配置,但结果仍然相同:
$ cat .gitconfig
[core]
packedGitLimit = 1024m
packedGitWindowSize = 1024m
[pack]
deltaCacheSize = 1024m
packSizeLimit = 1024m
windowMemory = 1024m
[http]
postBuffer = 157286400
我甚至尝试在另一台机器上使用git gc
,但不知道如何将裸存储库也用于垃圾收集。
我在git version 2.14.2.windows.1
计算机下使用32 bits
Windows 7
,内存为4GB。
如何在git clone上解决这个致命错误?
答案 0 :(得分:6)
使用Git repo是自包含且可以复制的事实,我们只需要一些方法来制作副本,并在我们的前几次尝试中从裸转换为非裸。
如果可以使用该选项,克隆仍然是初始复制的最佳形式(参见解决方法1和2)。如果没有,我们可以直接从服务器复制,如果访问可用,并手动转换(参见#3)。如果不这样做,也许复制/克隆一小部分回购邮件会有效吗?
登录服务器(如果您有访问权限),克隆到USB驱动器文件夹(作为非裸仓库),将USB粘贴到目标计算机,然后将其移动/复制到您想要回购的最终位置。 Git命令应该是:
git clone /path/to/bare/repo /local/repo/folder
我认为这不会复制任何孤立提交(那些最终将被垃圾收集的提交)。
克隆回复到另一台PC,以某种方式复制/移动文件夹到目标PC(USB,网络连接等)。类似于#1
这假设可能通过网络共享而不是直接访问服务器(否则使用#1)。在本地复制裸仓库,然后执行like this操作将其转换为非裸仓库。
It appears you can clone only a single branch at a time,可能符合导致记忆问题的限制:
git clone [url/folder] -b master --single-branch [local repo folder]
请注意,您可以在服务器上创建新的分支,这些分支在历史记录中有点回归,一次性减少,但根据上面链接中的答案,您可能需要跳过一些箍来删除“单个 - 你的新回购的“分支”。
使用--depth <depth>
和/或其他浅标签创建具有有限提交历史深度的本地存储库。来自git clone --help
手册页:
- 深度 创建一个浅层克隆,其历史记录被截断为指定的提交数。意味着 - 单个分支,除非给出--no-single-branch来获取所有分支的提示附近的历史。如果要浅层克隆子模块,还要传递--shallow-submodules。
- 浅因为= 在指定时间后创建一个带有历史记录的浅层克隆。
- 浅排除= 创建具有历史记录的浅层克隆,不包括可从指定的远程分支或标记访问的提交。可以多次指定此选项。
- [无糖]单支 仅克隆导致单个分支的提示的历史记录,由--branch选项或主分支远程的HEAD指向。进一步提取到生成的存储库只会更新分支的远程跟踪分支,此选项用于初始克隆。如果--single-branch clone创建时,远程的HEAD没有指向任何分支,则不会创建远程跟踪分支。
请参阅this answer及其链接,了解如何一次下拉部分回购协议。丑陋,但可以一次克隆部分。
答案 1 :(得分:2)
如果您使用的是Linux并且具有root用户访问权限,那么添加虚拟内存的简单变通办法可能是最简单的解决方案。在大多数Linux系统上,您可以(以root用户身份)执行以下操作以添加4GiB虚拟内存,然后在以下步骤后再次尝试git clone:
dd if=/dev/zero of=/var/swap.img bs=1M count=4096
chmod 0600 /var/swap.img
mkswap /var/swap.img
swapon /var/swap.img
当我遇到这个问题时,这最终成为我最简单的可行解决方案。