I'm developing a set of libraries that depend on a common set of other libraries.
I'd like to copy the .gitsubmodules file from one repo that has all of the necessary submodules into all of the other repos.
However I can't seem to get git to recognize the submodules file, or otherwise do anything to pull the submodules into the new repository.
CodePudding user response:
Git needs two things to realize a submodule:
- the configuration from the
.gitmodules
file, and - a corresponding
commit
entry in the index...which you get by runninggit submodule add
.
This is explicit in the documentation, which says this about the git submodule init
command:
Initialize the submodules recorded in the index (which were added and committed elsewhere) by setting
submodule.$name.url
in.git/config
. It uses the same setting from.gitmodules
as a template....
Practically, this means you'll need to run git submodule add
for each submodule. If you do this often, you could write a script that would read the submodule configuration from the .gitmodules
file and run the appropriate git submodule add
commands. Maybe something like:
#!/bin/bash
submodules=( $(git config -f .gitmodules --name-only --get-regexp 'submodule\..*\.path' | cut -f2 -d.) )
for name in "${submodules[@]}"; do
path="$(git config -f .gitmodules --get submodule."$name".path)"
url="$(git config -f .gitmodules --get submodule."$name".url)"
git submodule add "$url" "$path"
done