Git submodule

Git submodule Overview

Git submodules allow you to keep a git repository as a subdirectory of another git repository. Git submodules are simply a reference to another repository at a particular snapshot in time. Git submodules enable a Git repository to incorporate and track the version history of external code.

1

As the name suggests, the submodule in Git is a utility command that helps you to keep git repositories as the subdirectory of another repository. In general, submodules are the references of another repository. They keep track of the snapshots made at a particular time. They facilitate tracking and incorporating the version history of external codes present in the Git repository.

You might have often come across the fact that a code repository is solely dependent on the external code. It is also incorporated in various ways. Since you can directly pick up the code from the external sources or repositories and paste them into your repository, there might arise a situation of losing the upstream changes in the external repository.

Another procedure of incorporating external codes is through the method of specific modules present in languages like the Node..js(NPM) or Perl, Ruby Gems, etc.  This step involves the disadvantage of installing heavy methods all at once place while deploying your application. Both these methods carry downside and do not enable tracking or edit changes in the local repository. This is where the git submodule comes to the rescue.

A git submodule thus helps in keeping records of the methods while hosting and pointing to a specific commit in the external repository since they are very static and track specific. It is important to note that git submodules track only specific commits. They don't track the references or branches and are not automatically updated whenever you make an action. Therefore, you much first add a file with the name .gitmodules. It will store the metadata and the mapping techniques involved in the project as well as the local directory. If your project host has multiple submodules .gitmodules file will make an entry point for each of them.

When to use submodules?


The use of submodules depends on the following arising situations:

  1. If you want to maintain a stringent version over your external dependencies, you can make use of submodules.
  • If your external API breaks down due to too fast upcoming changes from the external components, you can use submodules to lock specific commits for your safety.
  • If the component that you are using isn't updated frequently and you want to keep track of its dependencies, you must use git submodules.
  • If you are deciding to release the work to a third party while delegating a piece of work from your project so that the updates are not frequently controlled, you may use git submodules.

Associated options

Usually, to initialize submodules in Git you may use the command:

$ git -submodules

There are other options available for carrying out certain operations associated with submodule command in Git. Let’s take a look at some commands.

$ git -submodules--quite

The above command is only used to print error messages.

$ git -submodules--progress

This submodule option is used to validate and update commands. It is used to check the progress under the standard error stream when your error command is attached to the terminal. These commands simply flag the progress status before directing them to the terminal.

$ git -submodules--all

The above command is used to de-initialize the unregistered submodules in the working tree.

$ git -submodules--branch<branch>

The above command is used to record the name of the branch present in the submodule while updating. It is important to note that the name of the branch in the submodule should be the same as the current branch in the working directory along with HEAD.

$ git -submodules--force

The above command is used to add, de-initialize, and update commands while running. It will ask you to allow the above functions while ignoring the rest. Running this command along with actions like add or update will remove the changes from the working tree despite having local changes.

$ git -submodules--catched

The above command is used to validate status and summarize them. The command makes use of the indexed commits stores in the submodule.

$ git -submodules--files

The above command is used only for validating the summary commands present in the files. It compares the commits with indexes present in submodules.

Summary

Git submodule is a very powerful dependency management and leveraging tool. You need to carefully weigh the advantages and disadvantages of submodules before choosing them for your project. The learning curve is pointy since it is an advanced command and may take time for a team member to adjust.