Git Submodules and Their Applications in Sharing Shared Resources

Git Submodules and Their Applications in Sharing Shared Resources

Daily short news for you
  • A software that converts text to speech created by a Vietnamese programmer - J2TEAM - Text to Speech (Free). You can convert dozens of languages into dozens of different natural voices. The special thing is that it is free.

    In preliminary evaluation, the conversion of long texts or texts in pure Vietnamese is very good. However, when it includes English words, it sounds a bit funny 😅

    » Read more
  • How terrifying, Codeium - known as a competitor to Github Copilot, as it allows users to use it for free without limits. Recently, they introduced the Windsurf Editor - no longer just a VSCode Extension but a full Editor now - directly competing with Cursor. And the main point is that it... is completely free 🫣.

    » Read more
  • There is a rather interesting study that I came across: "Users never bother to read things they don't want to." (That's a bold statement, but it's more true than not. 😅)

    Don't believe it? I bet you've encountered situations where you've clicked on a button repeatedly and it doesn't respond, but in reality, it has displayed an error message somewhere. Or you've filled out everything and then when you hit the submit button, it doesn't go through. Frustrated, you scroll up or down to read and find out... oh, it turns out there's an extra step or two you need to take, right?

    It’s not far from the blog here. I thought that anyone who cares about the blog would click on the "Allow notifications" button just below the post. But the truth is, no one bothers to click it. Is it because they don't want to receive notifications? Probably not! I think it's because they just didn’t read that line.

    The evidence is that only when a notification pops up and takes up half the screen, or suddenly appears to grab attention, do they actually read it—and of course, it attracts a few more subscribers—something that was never achieved before.

    » Read more

Issue

Integrated or created package managers used in programming languages are an effective way for us to reuse shared code. For example, in JavaScript/Node.js, there is npm with millions of packages shared by many programmers worldwide. Whenever we need something, what we usually do first is to look for a package that meets our needs to reduce software development time.

Sharing packages that anyone can search for and use may not always be suitable in some cases. For example, we create utility functions only for use in our company's internal projects or for personal use without sharing with anyone else. Although many package managers provide features to "publish" packages for internal use, there are still certain limitations such as costs and deployment time...

In git, there is a feature called submodule that can help us solve cases where we need to share folders or files with each other in repositories, so we don't have to spend a lot of effort to share utility code between projects. The details of how to do this are explained in the article below.

What Is Git Submodule?

Git Submodule is a powerful feature in Git that allows you to add and manage other repositories within your repository. It provides a way to easily integrate and track external source code dependencies.

Basically, a submodule is a Git repository embedded in another Git repository. It acts as a pointer to a specific commit in an external repository. By using submodules, you can add and use external source code libraries, frameworks, or any other projects as part of your project.

The simplest way to understand how submodules work is to share common code in different projects. For example, you create a repository that contains only files with utility functions (utils), and then you want to use them in another project. You can simply create a directory linked to the utility repository.

git submodules work

Utilizing submodules provides us with many conveniences in collaboration and code reuse because submodules are also Git repositories, so they can be further developed with features, bug fixes, maintenance, etc., like regular projects. When you want to receive changes, you only need to pull the submodule to get the latest code. You can even participate in developing submodules directly within the project linked to them by accessing the submodule directory and committing as usual.

Applications in Sharing Shared Resources

Suppose we are in project directory A and want to add submodule B with URL: https://github.com/2coffee/awesomelibrary.

Add a submodule using the add command:

$ git submodule add https://github.com/2coffee/awesomelibrary

Check what the command just did:

$ git status

On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

 new file:   .gitmodules
 new file:   awesomelibrary

Git reports that 2 new files have been added, which contain references to the linked submodule.

Try opening the .gitmodules file, and you will see the content looks like this:

[submodule "awesomelibrary"]
 path = awesomelibrary
 url = https://github.com/2coffee/awesomelibrary

Now you can check the awesomelibrary directory and use the code in it as if it belongs to the project.

Conclusion

In addition to copying or packaging code for use in another internal project, we also have another way to use Git submodules. It's simply linking another Git project to a directory in the current project, so we can easily receive the latest changes from it without having to go through many steps.

References:

Premium
Hello

The secret stack of Blog

As a developer, are you curious about the technology secrets or the technical debts of this blog? All secrets will be revealed in the article below. What are you waiting for, click now!

As a developer, are you curious about the technology secrets or the technical debts of this blog? All secrets will be revealed in the article below. What are you waiting for, click now!

View all

Subscribe to receive new article notifications

or
* The summary newsletter is sent every 1-2 weeks, cancel anytime.
Author

Hello, my name is Hoai - a developer who tells stories through writing ✍️ and creating products 🚀. With many years of programming experience, I have contributed to various products that bring value to users at my workplace as well as to myself. My hobbies include reading, writing, and researching... I created this blog with the mission of delivering quality articles to the readers of 2coffee.dev.Follow me through these channels LinkedIn, Facebook, Instagram, Telegram.

Did you find this article helpful?
NoYes

Comments (2)

Leave a comment...
Avatar
Trịnh Cường1 year ago
quá muộn rồi bạn ạ, giờ làm cái mới thì dùng, chứ giờ src phình to quá ko refactor lại đc nữa
Reply
Avatar
Xuân Hoài Tống1 year ago
Vậy thì phải để dành cho dự án sau rồi ạ
Avatar
Trịnh Cường1 year ago
hay đấy bạn ơi, giờ mình mới biết. trước giờ toàn ```npm publish``` để làm src dùng chung
Reply
Avatar
Xuân Hoài Tống1 year ago
Giờ thì bạn có thể sử dụng git submodules để làm điều đó rồi :D