Skip to content

Using git submodules to have a portion of a website public

I recently created a new website on Netlify and I wanted to have a portion of that public on GitHub so anyone could submit a pull request for typos, etc.

I had a content folder in my Hugo repo, and the part I wanted to make public was a folder called handbook.

So I made a new repository for that, which I called handbook.

I removed the content/handbook folder I had in my parent repo (you don’t need. this if you start fresh, but I wanted to move existing content):

rm -rf content/handbook

I committed the changes, then I added the submodule:

git submodule add https://github.com/flaviocopes/handbook

I deployed the website on Netlify and it automatically picked up the submodule.

Now locally I had a problem, because it’s not like there’s a symlink to the submodule repository folder.

I removed the content/handbook folder and added a symlink from the local repo of the submodule:

# from withing the `content` folder
ln -s ../../../dev/handbook/

Then I told Git to stop tracking the content/handbook folder using this command:

git update-index --skip-worktree content/handbook

(to restore tracking, use --no-skip-worktree instead)

In this way I had the best of both worlds - a submodule, but also - locally - a symlink to the submodule.


→ Want to actually learn Git? Want to stop feeling frustrated with it? I created the Git Masterclass to solve this problem!

→ I wrote 17 books to help you become a better developer:

  • C Handbook
  • Command Line Handbook
  • CSS Handbook
  • Express Handbook
  • Git Cheat Sheet
  • Go Handbook
  • HTML Handbook
  • JS Handbook
  • Laravel Handbook
  • Next.js Handbook
  • Node.js Handbook
  • PHP Handbook
  • Python Handbook
  • React Handbook
  • SQL Handbook
  • Svelte Handbook
  • Swift Handbook
...download them all now!

Also, JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025

Bootcamp 2025

Join the waiting list