32
votes

I'm trying to add a submodule that already existed (different git remote repository). As I didn't searched before how to do it correctly, I think I've messed up my repository and I need some help to fix it again.

I've already deleted all the relevant sections from the .gitmodules and .git/config regarding the submodules I want to delete. I've also verified that there is not modules directory inside my .git/ directory.

However, when I run the command git rm --cached path_to_submodule, the following message is displayed:

fatal: pathspec 'path_to_submodule' did not match any files

As the previous command fails, when I try to add again the same submodule with the new definitions, running the command git submodule add gituser@host:repo.git, this is the displayed message:

'repo' already exists in the index
5
I was trying to add a submodule with the same name of an already existing file in the index. - Rui Gonçalves

5 Answers

66
votes

The only way that message ('repo' already exists in the index) can be displayed is if 'repo' still exists in the index (see this chapter on submodule):

$ rm -Rf rack/
$ git submodule add [email protected]:schacon/rack.git rack
'rack' already exists in the index

You have to unstage the rack directory first. Then you can add the submodule:

$ git rm -r rack
$ git submodule add [email protected]:schacon/rack.git rack

Even if 'rack' isn't a submodule, if it exists, it would prevent the declaration of a submodule of the same name.

12
votes

If the output adding a new submodule is:

'FolderName' already exists in the index

Tip the next commands

git ls-files --stage 

The output will be something similar to:

160000 d023657a21c1bf05d0eeaac6218eb5cca8520d16  0  FolderName

Then, to remove the folder index tip:

git rm -r --cached FolderName

Try again add the submodule

3
votes

May occur, when merging with error, manual deleting of folder of submodule, or something else, like Hallileo Comet

  1. in file .gitmodules - delete links to submodule (whole section with submodule name)

  2. in file .git\config - delete links to submodule, as in previous step

  3. in folder .git\modules - delete folder with relative path similar to relative path of "problem" module

  4. ensure, that folder of submodule is not exists anymore

  5. then:

    $ git submodule add -f --name <name> <git://path_1.git> <path_2>

    where: name - name of submodule as u wish, may be equal your repo name; - path to submodule source repo (ie - github, etc), - relative path to folder where submodule will reside

    this lets u to add submodule within path or with name which still present in index, but not naturally alive.

i didn't found any method to remove these dead links from index, but when forced

1
votes

'submodules/uasdk-clib' already exists in the index

git rm -r --cached submodules/uasdk-clib

git submodule add -b china/release/16.8.0 -f ssh://[email protected] submodules/uasdk-clib

0
votes

this is because you have the folder in your repo same name as the name of your submodule

$ git rm -r subModuleName
$ git submodule add "your submodule repo path without these quotes"

Try again adding the submodule