git push致命:无法创建线程:资源暂时不可用



我是git新手。我想将一个大型提交推送到远程服务器,但问题是当我使用时

git push origin master

它返回错误

Counting objects: 5009, done.
Delta compression using up to 16 threads.
fatal: unable to create thread: Resource temporarily unavailable
error: pack-objects died with strange error

所以,我可以设置增量压缩的最大线程使用量。

感谢您的帮助,

袁晨

错误:"致命:无法创建线程:资源暂时不可用"强烈表明您的服务器内存不足,如果您有一个包含大量大文件的存储库,则可能会发生这种情况,这可能会导致重新打包占用大量内存,或者虚拟内存有限-通常情况下,或者由于ulimit设置而仅用于该帐户。

无论如何,以下是您可以运行的命令,通过登录到远程系统(作为git运行的用户)并键入以下命令来限制打包可能占用的内存量:

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"

希望这能奏效。

在共享主机中,我们的cpu资源有限,大部分是1个cpu,因此多线程在那里不能很好地工作。这个错误实际上是由于cpu资源有限。

仅此一位设置就足以解决此问题。

git config --global pack.threads "1"

这限制了git只能创建一个线程。

我也偶然发现了这个错误。更简单地说,之所以会出现此错误,是因为您想将一个100mb的文件复制到一个可用空间为50mb(或更少)的hdd中。要解决此问题,请将SSH连接到服务器并运行以下命令:

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"

"unable to create thread: Resource temporarily unavailable"表示远程服务器出现问题(比如没有更多可用内存)。

关于delta,您需要调整以下配置:

pack.deltaCacheSize

在将增量写入包之前,用于缓存git-pack对象(1)中增量的最大内存(以字节为单位)
一旦找到所有对象的最佳匹配,就不必重新计算最终的delta结果,因此该缓存用于加快写入对象阶段
不过,在内存紧张的机器上重新打包大型存储库可能会受到严重影响,尤其是在这种缓存迫使系统进行交换的情况下
值为0表示没有限制
1字节的最小大小可以用于虚拟禁用此缓存。默认值为256 MiB。

pack.deltaCacheLimit

缓存在git-pack对象中的增量的最大大小(1)
一旦找到所有对象的最佳匹配,就不必重新计算最终的delta结果,因此该缓存用于加快写入对象阶段。默认值为1000。

SO问题"Git pull failed with bad pack header error"引用了其他与pack相关的配置。

最新更新