Why can't I add back a git submodule after removing it

git, git-submodules

Solution

After some greping, I found that after

git submodule add -b master url_asub.git
git rm asub

a third step is needed:

rm -f .git/modules/asub

The error messages showed because the .git/modules/asub remains after `git rm`, and went away after removing the sub-directory. Now the submodule `asub` can be added back any way I like.

Problem

I tried deleting a submodule and then adding it back with git 1.8.5.2. An submodule `asub` was added by `git submodule add -b master url_asub.git`. I removed the submodule by ``` git rm asub ``` The asub directory is gone. I then tried to add it back again with the original command that added it (to test if the submodule removal in 1.8.5.2 is clean): ``` git submodule add -b master url_asub.git ``` I got an error message: ``` A git directory for 'asub' is found locally with remote(s): origin url_asub.git If you want to reuse this local git directory instead of cloning again from url_asub.git use the '--force' option. If the local git directory is not the correct repo or you are unsure what this means choose another name with the '--name' option. ``` I am not sure what this error message means. I also tried doing `git submodule sync` in the superproject, and tried ``` git submodule deinit asub git rm asub git submodule add -b master url_asub.git ``` But still I couldn't add the submodule back. What did I miss, or is this a bug in git 1.8.5.2? The reason I want to do this is to a) remove a submodule and b) add it back so that it reflects the most recent content of the submodule. This may sound naive but I found that the `submodule add -b` feature will break as soon as I clone the super project (how to keep git submodule on-branch status after cloning superproject?). So I figured probably a simply way to avoid all the troubles of keeping submodules tracking their master branches is to remove the submodule and add it back every time when cloning the super project.

Original source