How to Use the Git Submodule Init and Update Command?

Git submodules allow you to include and manage external repositories within your main repository. This is particularly useful for projects that rely on libraries or other codebases that are maintained separately. The `git submodule init` and `git submodule update` commands are essential for initializing and updating submodules. This guide will explain how to use these commands effectively to manage submodules in your Git projects.

Table of Content

  • What are Git Submodules?
  • Adding a Submodule
  • Initializing and Updating Submodules
  • Working with Submodules
  • Conclusion

What are Git Submodules?

Submodules are the external repositories included within another Git repository. They allow you to track the exact commit of the external repo that your project depends on.

Uses of Git Submodules

  • Including third-party libraries or dependencies.
  • Using shared code across multiple projects.
  • Maintaining a separation of concerns between different parts of a project.

Adding a Submodule

To add a submodule to your repository, use the following command:

git submodule add <repository-url> <path>

Replace `<repository-url>` with the URL of the external repository and `<path>` with the directory where you want the submodule to be located.

Example

git submodule add https://github.com/username/library.git libs/library

Initializing and Updating Submodules

Step 1. `git submodule init`

The `git submodule init` command initializes the submodule configuration in your local repository. It copies the mapping from the `.gitmodules` file into the local Git configuration file `.git/config`.

git submodule init

Step 2. `git submodule update`

The `git submodule update` command updates the submodule to the commit specified in the superproject’s (main project’s) repository. This command clones the submodule repository into the specified path and checks out the correct commit.

git submodule update

Combining Init and Update

Often, you want to initialize and update submodules in a single step. You can combine these commands as follows:

git submodule update --init

Step 3. `git submodule update –remote`

To update the submodule to the latest commit from the remote repository, use the `–remote` option:

git submodule update --remote

This command fetches the latest changes from the submodule’s remote repository and checks out the latest commit.

Working with Submodules

1. Cloning a Repository with Submodules

When you clone a repository that contains submodules, the submodules are not automatically initialized and updated. Follow these steps to properly clone and set up a repository with submodules.

Step 1. Clone the Repository:

git clone https://github.com/username/main-repo.git

Step 2. Initialize the Submodules:

cd main-repo    
git submodule init

Step 3. Update the Submodules:

git submodule update

Or combine the steps:

git clone --recurse-submodules https://github.com/username/main-repo.git

2. Making Changes to Submodules

If you need to make changes within a submodule:

Step 1. Navigate to the Submodule Directory:

cd libs/library

Step 2. Make Your Changes and Commit:

 git add .    
git commit -m "Update library"

Step 3. Push Changes to the Submodule Repository:

git push

Step 4. Update the Superproject to Reference the New Commit:

Navigate back to the superproject root directory and commit the new submodule state:

cd ../..
git add libs/library
git commit -m "Update submodule library to latest commit"
git push

3. Removing a Submodule

To remove a submodule, follow these steps:

Step 1. Deinitialize the Submodule:

 git submodule deinit -f -- path/to/submodule

Step 2. Remove the Submodule Directory:

rm -rf path/to/submodule

Step 3. Remove Submodule References:

Edit the `.gitmodules` and `.git/config` files to remove the submodule entry, then commit the changes:

git add .gitmodules
git rm --cached path/to/submodule
git commit -m "Remove submodule path/to/submodule"
git push

Conclusion

Using Git submodules can greatly enhance the management and organization of external dependencies in your projects. By understanding and effectively using the `git submodule init` and `git submodule update` commands, you can ensure that your submodules are properly initialized and kept up-to-date. Follow the steps and examples provided in this guide to master Git submodule management and keep your projects running smoothly.


Contact Us