Junio C Hamano <gitster@xxxxxxxxx> writes: > A simple and concrete reproduction > > git init top > cd top > date >file1 > git init sub > cd sub > date >subfile1 > git add . > git commit -m subinitial > cd .. ;# back to top > git submodule add ./sub sub > git add file1 > git commit -m initial > cd .. ;# out of top > git clone --recurse-submodules top copy > cd copy > git config submodule.recurse true > git config fetch.parallel 0 > GIT_TRACE2=$(pwd)/trace git fetch --all --prune --prune-tags > > This throws the three lines to the output. > > Fetching origin > Fetching submodule sub > Fetching submodule sub > > The two "Fetching submodule" messages are coming from two separate > calls to get_fetch_task_from_index(), and the trace does show that > the code is doing "git-upload-pack" three times (one for the top > level, twice for the same top/sub). We can see it by grepping > for "git-upload-pack" in the resulting 'trace' file above. Thanks for the reproduction recipe and findings, that'll be very helpful :) > Glen, as submodule.c::fetch_submodules() was created in your heavy > refactoring quite recently, I thought I'd redirect this report in > your direction, as I expect you'd be the most clueful in this area > ;-) Hm, this does look like something that I probably introduced. But even if it turns out to be older than that, I think I am the right person to fix it, yes. I'm a little caught up with the embedded bare repo work, but I think I can find time to debug this within the next 2 working days or so.