Git Submodules

1 min read

Commands

# Cloning a repo that contains submodules

git clone --recurse-submodules git://github.com/foo/bar.git

# Forgot to clone the submodule? It's ok

git submodule update --init --recursive

# Cloning in a github action

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: recursive

Advantages

  • Changes in the submodule are kept separate from the main repo. It's impossible to commit submodule changes to the main repo or vice versa.
  • git status in the main repo tells you if the submodule has uncommitted work, is behind origin.

How I got started

I had PTSD from trying git subtree back in 2014. I assumed submodules were the same. I first used them on March 29th to add my fork of hugo-theme-cactus-plus to the blog repo. Then I used to create the blog-template repo and pull it into the blog repo. It's worked excellently.

In crawler I added a submodule for the sake of tests. Didn't pollute a Go repo with a massive amount of HTML.