# RE: fatal: could not reset submodule index

3 messages from 2018-06-14 to 2018-06-18. Participants: Antoine W. Campagna, Stefan Beller.
Thread: https://gitlist.dev/t/48712

## Antoine W. Campagna, 2018-06-14 18:19

Subject: RE: fatal: could not reset submodule index
Message-ID: <DB6PR0101MB2344D682511891E4E9528598D97D0@DB6PR0101MB2344.eurprd01.prod.exchangelabs.com>
URL: https://gitlist.dev/e/DB6PR0101MB2344D682511891E4E9528598D97D0%40DB6PR0101MB2344.eurprd01.prod.exchangelabs.com

```
On Wed, Jun 13, 2018 at 18:19, Antoine W. Campagna wrote:
> Here is the full reproduction instructions:

Newlines got mangled, making my message hard to read. Sorry.

Here is the corrected reproduction instructions:

# Create a repository
mkdir main
cd main
git init
touch main.txt
git add main.txt
git commit -a -m "Initial commit"
cd ..

# Create a second repository
mkdir sub
cd sub
git init
touch sub.txt
git add sub.txt
git commit -a -m "Initial commit of repo sub"
cd ..

# Add the second repository as submodule, on a separate branch
cd main
git branch with-submodule
git checkout with-submodule
git submodule add ../sub sub
git commit -a -m "Add submodule"

# Set main repo back to master branch (without the submodule)
git checkout master
cd ..

# Make a clone and checkout the branch
git clone main clone1
cd clone1
git checkout with-submodule
# Submodule is not automatically updated (sub folder is empty)
git submodule update --init --recursive
# Now the submodule content is there
# But I want to automatically update submodules when checking out a branch
cd ..

# Trying again, adding --recursive during clone
git clone --recursive main clone2
cd clone2
git checkout with-submodule
# Submodule is still not automatically updated (sub folder is empty)
git submodule update --init --recursive
cd ..

# Trying again, adding --recurse-submodules during checkout
git clone --recursive main clone3
cd clone3
git checkout --recurse-submodules with-submodule
# Fails with these error messages :
#	fatal: not a git repository: ../.git/modules/sub
#	fatal: could not reset submodule index
# It seems like Git tries to update the submodule but without having initialized the submodule cd ..

# Trying again with submodule.recurse
git config --global submodule.recurse true
git clone main clone4 cd clone4
git checkout with-submodule
# Submodule is still not automatically updated (sub folder is empty)
# It seems like submodule.recurse does not affect git clone

# Trying again with both submodule.recurse and --recursive
git config --global submodule.recurse true
git clone --recursive main clone5 cd clone5
git checkout with-submodule
# Fails with these error messages :
#	fatal: not a git repository: ../.git/modules/sub
#	fatal: could not reset submodule index
# Same issue as with "git checkout --recurse-submodules"


```

## Stefan Beller, 2018-06-15 19:47

Subject: Re: fatal: could not reset submodule index
Message-ID: <CAGZ79kYUyzJK7a+=bQMxi=YJ5LgkS_2eJA1dB325U71ks1jjGg@mail.gmail.com>
URL: https://gitlist.dev/e/CAGZ79kYUyzJK7a%2B%3DbQMxi%3DYJ5LgkS_2eJA1dB325U71ks1jjGg%40mail.gmail.com
In-Reply-To: <DB6PR0101MB2344D682511891E4E9528598D97D0@DB6PR0101MB2344.eurprd01.prod.exchangelabs.com>

```
> # Trying again with submodule.recurse
> git config --global submodule.recurse true
> git clone main clone4 cd clone4
> git checkout with-submodule
> # Submodule is still not automatically updated (sub folder is empty)
> # It seems like submodule.recurse does not affect git clone

That is true; submodule.recurse is not affecting git clone.
This was a design decision once it was introduced, as the git clone
might be too large. Maybe we need to revisit that decision and
just clone the submodules if submodule.recurse is set.

The problem that this bug report highlights, is the following:
Each branch has its own .gitmodules file and they can be
all different, however at clone time we only clone submodules
from the currently active branch.

So you could get your test case to pass with
    git clone --branch with-submodule main clone5

```

## Antoine W. Campagna, 2018-06-18 13:57

Subject: RE: fatal: could not reset submodule index
Message-ID: <DB6PR0101MB23445AE7C96E5108B544D015D9710@DB6PR0101MB2344.eurprd01.prod.exchangelabs.com>
URL: https://gitlist.dev/e/DB6PR0101MB23445AE7C96E5108B544D015D9710%40DB6PR0101MB2344.eurprd01.prod.exchangelabs.com
In-Reply-To: <CAGZ79kYUyzJK7a+=bQMxi=YJ5LgkS_2eJA1dB325U71ks1jjGg@mail.gmail.com>

```
> That is true; submodule.recurse is not affecting git clone.
> This was a design decision once it was introduced, as the git clone might be too large. Maybe we need to revisit that decision and just clone the submodules if submodule.recurse is set.
>
> The problem that this bug report highlights, is the following:
> Each branch has its own .gitmodules file and they can be all different, however at clone time we only clone submodules from the currently active branch.
>
> So you could get your test case to pass with
>     git clone --branch with-submodule main clone5
> 

Thank you for your input Stefan.

But here is our situation : 
7 different projects in separate repositories
Big parts of the code is similar between the projects
We want to extract these similar portions in separate repositories and add them as submodules (maybe about 10 of them).
We would do this progressively, adding one submodule at a time.
We need to support older versions so we have to keep branches that will not have submodules.
Since we need to checkout these branches regularly, we would want to have submodule.recurse enabled.
With this setup, every time a submodule is added in one of the projects, each developer would get the "fatal: could not reset submodule index" error and would be unable to checkout master branch.


```
