Adding git submodules automatically (.gitmodules)
git, git-submodules
Solution
When you add a Git submodule, Git creates `.gitmodules` file and for a submodule named `git-submodule` will add something like this:
[submodule "git-submodule"]
path = git-submodule
url = https://github.com/TomasHubelbauer/git-submodule
The same is added to `.git/config` after the existing content in that file.
A folder for the submodule named after the submodule is created in `.git/modules`. This folder is nearly identical to the the `.git` directory of the actual submodule repository, but it doesn't contain the actual `objects` (instead the submodule data is checked out to its directory and its metadata are here).
This means that theoretically, you might be able to add a submodule by hand without using `git submodule add`, but you would have to recreate all these config files. But one can still imagine cloning the submodule repository to a separate directory and copying its `.git` over to this one. That might work.
However, adding a submodule also changes the index, `.git/index`, so you would have to manually update this hash as well, and at this point, you're reimplementing Git, but manually.
As a result, I don't believe it is anywhere near practical to add a Git submodule by hand.
Problem
I have a repo with several submodules. I want to add some others, and the fastest way for me is to use the `.gitmodules` (which in my opinion should clearly allow any kind of submodule management). However, when editing this file and adding submodules, after a `git submodule init` nothing is added (except the submodules that were already present before the modification). Is there any solution to add a submodule without going through `git submodule add` (ie, just by editing the `.gitmodules` file and then `git submodule update --init`) ? That is, the following workflow should automatically add the submodule "foo/bar": ``` Add the following to .gitmodules: [submodule "foo/bar"] path = foo/bar url = https://example.com/foo.git Run the following command after saving: git submodule init git submodule update Expected result: submodule 'foo/bar' automatically gets added it is also updated (the update command) ```