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.
→ 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