How to Pull the Latest Git Submodule

It is possible to include different git repositories into a single repository in Git. The included repositories are known as submodules. Submodules are repositories that are involved in the parent repository at a particular path in the working directory of the parent repository.

After setting up the submodules, you can update your repository with fetch/pull you usually do. For that purpose, you can use the --recurse-submodules as well as the --remote parameter of the git pull command.

While working with submodules, it is often necessary to pull the latest git submodule. In case you are doing it the first time, you should initiate submodules on their repository:

git submodule update --init --recursive

If the Git version, you are working on is 1.8.2 or above, you can add the --remote parameter, and run the following command:

git submodule update --recursive --remote

The --remote parameter will add your non-default branches to particular files in .git/config or .gitmodules.

If your Git version is 1.7.3. Or above, you need to run:

git submodule update --recursive


git pull --recurse-submodules

How to Push Updates in Git Submodule

As the submodule represents a separate repository, it allows running the git push command in the directory of the submodule.

If you invoke the git status command in your principal repository, the submodule will be in the “Changes not staged for commit” with the following text: “modified content. It will check out the code of the submodule on another commit, not the one that your main repository is pointing at. If you want the principal repository to point at the new commit, you need to invoke the git add command, commit, and finally push it.

How to Clone Git Submodules

Another common action for git submodules is cloning a project with submodules. You can proceed by using the git clone command. With the help of this command, you can clone the directories with their submodules. Note that it won’t clone the files within them. You need to run git submodule init andgit submodule update. The first command updates your local .git/config file along with the mapping from the .gitmodules. The second command will fetch the overall data from the submodule project, checking out the mapped commit in the parent project.

Generally, if you want to keep your projects in different repositories, using submodules is the right decision. Anyway, you should take into consideration the fact that working with submodules is quite tricky, and you can’t use them for all your projects.

Do you find this helpful?

Related articles