我是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
无论如何,我可以为Delta Compression设置最大线程使用。
感谢您的帮助,
袁晨
答案 0 :(得分:110)
错误:“致命:无法创建线程:资源暂时不可用”强烈建议您在服务器上耗尽内存,如果您的存储库包含大量大文件,这可能会导致重新启动打包以占用大量内存或有限的虚拟内存 - 一般情况下,或仅因为ulimit设置而占用该帐户。
无论如何,这里有一些命令可以通过登录到远程系统(就像git运行的用户那样)来限制打包可能占用的内存量并输入以下命令:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
希望这有效。
答案 1 :(得分:4)
我也偶然发现了这个错误。为简化起见,出现此错误的原因是您要将100mb文件复制到可用空间为50mb(或更少)的硬盘中。要解决此问题,请将SSH连接到服务器并运行以下命令:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
答案 2 :(得分:2)
“unable to create thread: Resource temporarily unavailable
”表示远程服务器出现问题(不再有可用内存)。
关于delta,您可以使用以下config进行调整:
pack.deltaCacheSize
在将git-pack-objects(1)写入包之前用于缓存增量的最大内存(以字节为单位)。
此缓存用于加速写入对象阶段,一旦找到所有对象的最佳匹配,就不必重新计算最终的增量结果。
尽管如此,在内存紧张的计算机上重新打包大型存储库可能会受到严重影响,尤其是当此缓存推动系统进行交换时。 值为0表示没有限制 可以使用1字节的最小大小来虚拟地禁用该高速缓存。默认为256 MiB。
pack.deltaCacheLimit
在git-pack-objects(1)中缓存的delta的最大大小。
此缓存用于加速写入对象阶段,一旦找到所有对象的最佳匹配,就不必重新计算最终的增量结果。默认为1000.
SO问题“Git pull fails with bad pack header error”引用其他pack
相关的配置。
答案 3 :(得分:0)
在共享托管中,我们有限的cpu资源(大多数为1 cpu),因此多线程在这里不能很好地工作。此错误实际上是由于有限的cpu资源引起的。
仅此一个git设置就足以解决此问题。
git config --global pack.threads "1"
这限制了git只能创建一个线程。