I'm new to git and would appreciate help with adding submodules.
I've received two projects sharing some common code. The shared code was just copied into the two projects. I created a separate git repo for the common code and removed it from the projects with the plan to add it as a git
submodule.
I used the path option of git submodule add to specify the folder:
git submodule add url_to_repo projectfolder
but then got the error:
'projectfolder' already exists in the index"
This is the desired structure of my repository:
repo
|-- projectfolder
|-- folder with common code
It is possible to add the git
submodule directly in the repo, or into a new folder there, but not in the project folder. The problem is that it really need to be in the project folder..
What can I do about this and what have I misunderstood about the path option of git submodule add?
I'm afraid there's not enough information in your question to be certain about what's going on, since you haven't replied to my follow-up question, but this may be of help in any case.
That error means that projectfolder
is already staged ("already exists in the index"). To find out what's going on here, try to list everything in the index under that folder with:
git ls-files --stage projectfolder
The first column of that output will tell you what type of object is in the index at projectfolder
. (These look like Unix filemodes, but have special meanings in git.)
I suspect that you will see something like:
160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0 projectfolder
(i.e. a line beginning with 160000
), in which case the repository in projectfolder
has already been added as a "gitlink". If it doesn't appear in the output of git submodule
, and you want to re-add it as a submodule, you can do:
git rm --cached projectfolder
... to unstage it, and then:
git submodule add url_to_repo projectfolder
... to add the repository as a submodule.
However, it's also possible that you will see many blobs listed (with file modes 100644
and 100755
), which would suggest to me that you didn't properly unstage the files in projectfolder
before copying the new repository into place. If that's the case, you can do the following to unstage all of those files:
git rm -r --cached projectfolder
... and then add the submodule with:
git submodule add url_to_repo projectfolder