bugl
bugl
HomeLearnPatternsSearch
HomeLearnPatternsSearch

Loading lesson path

Learn/Git/Git Advanced
Git•Git Advanced

Git Submodules

What Are Git Submodules?

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.

Why Use Submodules?

Submodules are helpful when you want to:

Reuse code from another project

Track a library or dependency at a specific commit

Keep histories of projects separate

How to Add a Submodule

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.

How to Clone a Repo with Submodules

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

How to Check Submodule Status

To see the current commit and state of your submodules, use:

Example: Submodule Status git submodule status

How to Run Commands in All Submodules

You can run a command in every submodule. For example, to check their status:

Example: foreach git submodule foreach git status

How to Update Submodules

To update submodules to the latest commit from their remote repository:

Example: Update All Submodules git submodule update --remote

How to Remove a Submodule

To remove a submodule:

Delete the relevant section from.gitmodules Remove the submodule directory from your working tree

Formula

Run git rm -- cached path/to/submodule

About .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.git

Troubleshooting and Best Practices

If 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.

Note:

Submodules are powerful, but can be tricky to manage. Only use them if you really need to track another project at a specific commit.

Previous

Git Hooks

Next

Git Advanced Remote