git pull fails with following error
remote: Counting objects: 146, done.
remote: fatal: unable to create thread: Resource temporarily unavailable
error: git
Complementing the @Mark Longair's answer:
I had to run the following commands to fix this issue:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
git config --global pack.deltaCacheSize "512m"
You can see more about these commands in the git documentation git config.
The lines beginning with remote
are output from git running on the remote system. The error:
fatal: unable to create thread: Resource temporarily unavailable
... strongly suggests that you've run out of memory on the server, which can happen if you have either:
ulimit
settingA suggestion here is to limit the amount of memory that packing may take by logging into the remote system (as the user that git runs as) and doing:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
I was able to resolve this using following steps
Step 1. clone using lesser depth
git clone https://your_git_clone_url --depth 3
Step 2. Edit .git/config and add line for develop. This is required as after setting depth I was not able to switch remote branch other than master
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https:<your git clone url>
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/develop:refs/remotes/origin/develop <<--- Add this line
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "develop"]
remote = origin
merge = refs/heads/develop
Step 3: get fetch
Warning: if you see this error with Git 2.19.1, this is expected, and documented in git-for-windows/git issue 1839: "git gc
crashes at 33% of counting objects" (which reports an APPCRASH both for git gc
, but also for git pull
), because of a mutex used in "git pack-objects", which was not correctly initialized and caused "git repack
" to dump core on Windows.
As mentioned in the issue:
It affects more than just
gc
. I hit a variant of it withpull
too:$ git pull remote: Enumerating objects: 3548, done. error: git upload-pack: git-pack-objects died with error. fatremote: aborting due to possible repository corruption on the remote side. al: git uploadf-pack: aborting due to possible repository corruption on the remote side. atal: protocol error: bad pack header
This is fixed in Git 2.20 (Q4 2018).
See commit 34204c8, commit 9308f45, commit ce498e0 (16 Oct 2018) by Johannes Schindelin (dscho).
(Merged by Junio C Hamano -- gitster -- in commit 620b00e, 30 Oct 2018)
pack-objects
(mingw): initializepacking_data
mutex in the correct spotIn 9ac3f0e (
pack-objects
: fix performance issues on packing large deltas, 2018-07-22, Git v2.19.0-rc1), a mutex was introduced that is used to guard the call to set the delta size. This commit even added code to initialize it, but at an incorrect spot: ininit_threaded_search()
, while the call tooe_set_delta_size()
(and hence topacking_data_lock()
) can happen in the call chaincheck_object()
<-get_object_details()
<-prepare_pack()
<-cmd_pack_objects()
, which is long before theprepare_pack()
function callsll_find_deltas()
(which initializes the threaded search).Another tell-tale that the mutex was initialized in an incorrect spot is that the function to initialize it lives in builtin/, while the code that uses the mutex is defined in a
libgit.a
header file.