Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Git Submodules and Subtrees

1. Introduction

Git Submodules and Subtrees are powerful features in Git that allow you to manage and include external repositories within your own project. They are particularly useful for handling dependencies or shared libraries in a modular way.

2. Git Submodules

2.1 What are Submodules?

Submodules are repositories nested inside another Git repository. They allow you to include and track an external repository as a part of your own.

2.2 Adding a Submodule

git submodule add  []
Note: The is optional; if not provided, the submodule will be added to the root of the repository.

2.3 Cloning a Repository with Submodules

git clone --recurse-submodules 

2.4 Updating Submodules

git submodule update --remote

3. Git Subtrees

3.1 What are Subtrees?

Subtrees allow you to merge an external repository into a subdirectory of your own repository. Unlike submodules, subtrees do not need any special commands to clone or fetch.

3.2 Adding a Subtree

git subtree add --prefix=  

3.3 Updating a Subtree

git subtree pull --prefix=  

4. Comparison

Here’s a quick comparison of Submodules and Subtrees:

  • Submodules are separate repositories and require additional steps to manage.
  • Subtrees are integrated into the main repository, making them easier to work with.
  • Submodules maintain their history separately, while subtrees merge history into the main project.

5. Best Practices

  • Use submodules for projects that require strict version control of external dependencies.
  • Prefer subtrees for a more straightforward integration without managing multiple repositories.
  • Always document your choices in the repository to help future maintainers understand the structure.

6. FAQ

What happens if I delete a submodule directory?

You must also remove the submodule reference from the .gitmodules file and the .git/config to fully remove it.

Can I use submodules and subtrees together?

Yes, you can use both in the same project, but it's essential to understand their differences and manage them properly.

How do I remove a subtree?

To remove a subtree, simply delete its directory and commit the changes.