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.


→ Here's my latest YouTube video

→ I wrote 17 books to help you become a better developer, download them all at $0 cost by joining my newsletter

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