fatal: could not reset submodule index
- From
Antoine W. Campagna <awe@frontmatec.com>
- Date
- Jun 13, 2018, 22:17 UTC
- Message-ID
- <DB6PR0101MB2344147D4749598823B094F1D97E0@DB6PR0101MB2344.eurprd01.prod.exchangelabs.com>
Hi,
I would like to add submodules to existing projects. Some branches would have the submodules and some branches would not. Since we often switch from one branch to another, I would like the submodules to update automatically so I activate the option submodule.recurse. But I am experiencing a problem if I do the following: 1. Clone repo, with master containing no submodules 2. Checkout a branch that contains submodules. It results in this error: fatal: not a git repository: ../.git/modules/submodule fatal: could not reset submodule index I think git is trying to update the submodule but the submodule has not yet been initialized (runs "git submodule update" without "--init"). Is there a way to ask git to initialize the submodule automatically ?
Here is the full 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"
# I tested this in git-bash on Windows 10 $ git --version git version 2.17.1.windows.2 # And in Ubuntu in WSL $ git --version git version 2.17.1