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!

download all my books for free

  • javascript handbook
  • typescript handbook
  • css handbook
  • node.js handbook
  • astro handbook
  • html handbook
  • next.js pages router handbook
  • alpine.js handbook
  • htmx handbook
  • react handbook
  • sql handbook
  • git cheat sheet
  • laravel handbook
  • express handbook
  • swift handbook
  • go handbook
  • php handbook
  • python handbook
  • cli handbook
  • c handbook

subscribe to my newsletter to get them

Terms: by subscribing to the newsletter you agree the following terms and conditions and privacy policy. The aim of the newsletter is to keep you up to date about new tutorials, new book releases or courses organized by Flavio. If you wish to unsubscribe from the newsletter, you can click the unsubscribe link that's present at the bottom of each email, anytime. I will not communicate/spread/publish or otherwise give away your address. Your email address is the only personal information collected, and it's only collected for the primary purpose of keeping you informed through the newsletter. It's stored in a secure server based in the EU. You can contact Flavio by emailing flavio@flaviocopes.com. These terms and conditions are governed by the laws in force in Italy and you unconditionally submit to the jurisdiction of the courts of Italy.

Related posts about git: