Невозможно клонировать Git репозиторий, ошибка: "Resource temporarily unavailable"

При попытке клонировать Git репозиторий, я получил вот такое сообщение: remote: Compressing objects: 7% (88/1255) remote: fatal: unable to create thread: Resource temporarily unavailable remote: aborting due to possible repository corruption on the remote side. fatal: index-pack failed

При попытке клонировать существующий Git репозиторий с сервера, я получил вот такое сообщение:

remote: Compressing objects: 7% (88/1255) remote: fatal: unable to create thread: Resource temporarily unavailable remote: aborting due to possible repository corruption on the remote side. fatal: index-pack failed

Поиски в интернете подсказали причину и пути решения. Одна из возможных причин ошибки - это нехватка оперативной памяти для git, причем это не значит что памяти не хватает физически. Git сам ограничивает для себя оперативную память, которую может использовать, вот какие настройки рекомендуют сделать:

git config --global pack.windowMemory "100m" git config --global pack.packSizeLimit "100m" git config --global pack.threads "1" и/или git config --global pack.window "0"

Однако, это не помогло в моем случае, т.к.доступа к настройкам Git у меня не было. Для решения проблемы нужно было выкачать хранилище небольшими порциями. Для этого изначально, репозиторий был создан с ключем depth 1:

git clone --depth 1 ...

Чтобы докачать в репозиторий недостающую историю для Git версии больше 1.8.3. существует команда:

git fetch --unshallow

Но в данном случае она не помогла, т.к. выдавала аналогичную ошибку на стороне сервера.

Чтобы скачать историю изменений репозитория полностью, несколько раз была выполнена команда fetch с параметром --depth

git fetch --depth 1 git fetch --depth 2 git fetch --depth 3

И так до тех пор, пока в ответ не будет получено:

remote: Total 0 (delta 0), reused 0 (delta 0)

Это значит, что репозиторий успешно скачан, и с ним можно работать.

UPD: в следующий раз, когда столкнулся с этой проблемой, указанный способ решения уже не подошел, пришлось решать вопрос с добавлением следующих строк в настройки.

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

Получается, только это можно считать полноценным решением.

14.09.2015