Git Submodule
A submodule is a Git repository inside another Git repository. The outer repository stores the submodule's URL in .gitmodules and remembers exactly which commit of it to use.
A plain clone does not download submodules. Use git clone --recurse-submodules, or run git submodule update --init after cloning.
Add a submodule
git submodule add https://github.com/example/library.git libs/library
Cloning into '/home/user/project/libs/library'...
cat .gitmodules
[submodule "libs/library"]
path = libs/library
url = https://github.com/example/library.git
git status --short
A .gitmodules
A libs/library
Get the submodules after a clone
A minus sign in front of the hash means the submodule is not checked out yet:
git submodule status
-25848aed1b8fe8529c3ca7f7ce68ccf4ec7bb1b2 libs/library
git submodule update --init --recursive
Submodule 'libs/library' (https://github.com/example/library.git) registered for path 'libs/library'
Cloning into '/home/user/project/libs/library'...
Submodule path 'libs/library': checked out '25848aed1b8fe8529c3ca7f7ce68ccf4ec7bb1b2'
git submodule status
25848aed1b8fe8529c3ca7f7ce68ccf4ec7bb1b2 libs/library (heads/main)