Ced*_*olo 4 memory git git-clone
当我从我的项目的裸存储库执行git克隆时,在本地服务器上,我收到以下错误消息:
致命:内存不足,malloc失败(试图分配2251896833字节)警告:克隆成功,但结帐失败.您可以使用'git status'检查已检出的内容,然后使用'git checkout -f HEAD'重试结帐
我尝试~/.gitconfig按照这个问题的答案更新我的文件,关闭git bash,重新启动并重试没有任何结果.
我最终尝试了以下配置,但结果仍然相同:
$ cat .gitconfig
[core]
packedGitLimit = 1024m
packedGitWindowSize = 1024m
[pack]
deltaCacheSize = 1024m
packSizeLimit = 1024m
windowMemory = 1024m
[http]
postBuffer = 157286400
Run Code Online (Sandbox Code Playgroud)
我甚至试过git gc在另一台机器上,但不知道如何将裸存储库也用于垃圾收集.
我在4GB内存git version 2.14.2.windows.1的32 bits机器下使用Windows 7.
如何在git clone上解决这个致命错误?
如果您使用的是 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
Run Code Online (Sandbox Code Playgroud)
当我遇到这个问题时,这对我来说是最简单可行的解决方案。
使用Git repo是自包含且可以复制的事实,我们只需要一些方法来制作副本,并在我们的前几次尝试中从裸转换为非裸.
如果可以使用克隆,克隆仍然是初始复制的最佳形式(参见解决方法1和2).如果没有,我们可以直接从服务器复制,如果访问可用,并手动转换(参见#3).如果做不到这一点,也许复制/克隆一小部分回购将会起作用?
获取服务器上(如果你有机会),克隆到USB驱动器文件夹(如非裸露的回购协议),USB棒到目标机器,只是移动/复制到你想回购的最终位置.Git命令应该是:
git clone /path/to/bare/repo /local/repo/folder
Run Code Online (Sandbox Code Playgroud)
我认为这不会复制任何孤立提交(那些最终将被垃圾收集的提交).
克隆回购到另一台PC,以某种方式复制/移动文件夹到目标PC(USB,网络连接等).与#1类似
这假设可能通过网络共享而不是直接访问服务器(否则使用#1).在本地复制裸存储库,然后执行类似的操作将其转换为非裸存储库.
看起来您一次只能克隆一个分支,这可能适合您的内存问题:
git clone [url/folder] -b master --single-branch [local repo folder]
Run Code Online (Sandbox Code Playgroud)
注意:您可以创建有点回到历史,拉少一次在服务器上的新分支,但基于上面的链接的答案,你可能有过一些跳铁圈删除"单branchedness"你的新回购
使用--depth <depth>和/或其他浅标签来创建具有有限提交历史深度的本地存储库.从git clone --help手册页:
--depth创建一个浅层克隆,其历史记录被截断为指定的提交次数.意味着 - 单个分支,除非给出--no-single-branch来获取所有分支的提示附近的历史.如果要浅层克隆子模块,还要传递--shallow-submodules.
--shallow-since =在指定时间后创建一个带有历史记录的浅层克隆.
--shallow-exclude =创建一个带有历史记录的浅层克隆,不包括从指定的远程分支或标记可到达的提交.可以多次指定此选项.
- [no-] single-branch仅克隆通往单个分支尖端的历史记录,由--branch选项或主分支远程的HEAD指向.进一步提取到生成的存储库只会更新分支的远程跟踪分支,此选项用于初始克隆.如果在创建单个分支克隆时远程处的HEAD未指向任何分支,则不会创建远程跟踪分支.
请参阅此答案及其链接,了解如何一次只下拉回购的一部分.丑陋,但可以一次克隆部分.