From: Peter Kästle Date: Thu, 03 Dec 2020 15:10:28 GMT Subject: Re: BUG in fetching non-checked out submodule Message-ID: <5869c005-468b-8686-3022-3fa18f28f96e@nokia.com> In-Reply-To: Hi Ralf, On 03.12.20 13:30, Ralf Thielow wrote: > It can be reproduced with the following sequence of commands: > > git init sub > cd sub > touch file > git add file > git commit -m "add file" > cd .. > git init main > cd main > git submodule add ../sub > git submodule init > git submodule update --checkout > git submodule deinit -f sub/ > git fetch --recurse-submodules With git from master state the "git fetch --recurse-submodules" results in an infinite recurse call. I translated your sequence into a bash script, which can then be easily converted into a test case for git. Problematic was the infinite recurse loop of the git fetch command, which I solved by grep'ing for the second recursion output and abort using -m1. Could you please confirm, that you see "passed" for the good git versions and "failed" for the bad ones? #!/bin/bash testcase () { rm -Rf main sub && git init main && git init sub && touch sub/file && git -C sub add file && git -C sub commit -m "add file" && git -C sub rev-parse HEAD >expect && git -C main submodule add ../sub && git -C main submodule init && git -C main submodule update --checkout && git -C main submodule deinit -f sub && ! git -C main fetch --recurse-submodules |& grep -v -m1 "Fetching submodule sub$" && git -C main submodule status | sed -e "s/^-//" -e "s/ sub$//" >actual && cmp expect actual } if testcase then echo "passed" else echo "failed" fi -- --peter;