Loading lesson path
Git submodules let you include one Git repository inside another as a subdirectory.This is useful for adding libraries or dependencies managed in separate repositories, while keeping their commit history separate.
Submodules are helpful when you want to:
Track a library or dependency at a specific commit
To add a submodule to your project, use:
Example: Add a Submodule git submodule add https://github.com/example/library.git libs/library
Formula
This creates a subdirectory libs/library and updates.gitmodules with the submodule info.When you clone a repository with submodules, you need to fetch their contents separately:
Example: Init and Update Submodules git submodule init git submodule update Or do it all at once when cloning:
Example: Clone with Submodules git clone --recurse-submodules https://github.com/user/repo.git
To see the current commit and state of your submodules, use:
You can run a command in every submodule. For example, to check their status:
To update submodules to the latest commit from their remote repository:
Example: Update All Submodules git submodule update --remote
Delete the relevant section from.gitmodules Remove the submodule directory from your working tree
Formula
Run git rm -- cached path/to/submoduleAbout .gitmodules The.gitmodules file keeps track of all submodules and their paths. Edit this file if you move or remove submodules.
Example: .gitmodules File
Formula
[submodule "libs/library"]
path = libs/library url = https://github.com/example/library.gitIf submodules are empty after cloning, run git submodule update --init --recursive.
Formula
If you change a submodule's URL, update both.gitmodules and.git/config.
Submodules always point to a specific commit, not always the latest - remember to update if you want new changes.Keep submodules for external projects you want to track at a fixed version. For simpler needs, consider alternatives like Git subtree or copying files.
Submodules are powerful, but can be tricky to manage. Only use them if you really need to track another project at a specific commit.