Note that this would make superproject/path/to/<module>/
a nested Git repo, whose SHA1 would still be recorded by the parent project.
To keep the exact same state, you can copy superproject/.git/modules/<module>
and rename to superproject/path/to/<module>
, and rename <module>/<module>
to <module>/.git
.
Then you can use the git submodule deinit
to remove the submodule:
mv asubmodule asubmodule_tmp
git submodule deinit -f -- a/submodule
rm -rf .git/modules/a/submodule
# if you want to leave it in your working tree
git rm --cached asubmodule
mv asubmodule_tmp asubmodule
I still want to be a submodule of superprojec
Then its .git
folder would be in superproject/.git/modules/<module>
submodule absorbgitdirs
does not leave any choice:
If a git directory of a submodule is inside the submodule, move the git directory of the submodule into its superprojects $GIT_DIR/modules
path and then connect the git directory and its working directory by setting the core.worktree
and adding a .git
file pointing to the git directory embedded in the superprojects git directory.
I don't see in git config
any configuration that might move $GIT_DI R/modules
.
absorbgitdirs
was introduced in commit f6f8586 for Git 2.12 (Q4 2016)
Its tests shows it expects to use GIT_DIR/modules
.
Older Git (before Git 1.7.8, Oct. 2011) had a .git
directly inside the submodule folder.
As noted by Jeremiah Rose in the comments:
Another use case is: if you are using a Docker container to use git
commands inside a submodule, where the container can't see the superproject and errors out. :(
.git
info living insuperproject/.git/modules/<module>
. – Jobie