Add a submodule which can't be removed from the index
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
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 firstname.lastname@example.org: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@example.com: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.
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
May occur, when merging with error, manual deleting of folder of submodule, or something else, like Hallileo Comet
in file .gitmodules - delete links to submodule (whole section with submodule name)
in file .git\config - delete links to submodule, as in previous step
in folder .git\modules - delete folder with relative path similar to relative path of "problem" module
ensure, that folder of submodule is not exists anymore
$ 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
'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://firstname.lastname@example.org submodules/uasdk-clib