If you have a project on GitHub, and you host the project site with GitHub Pages, you might well have a _site or dist directory or something similar living alongside your application code.

In Jekyll’s case, your site is built from the files in _site every time you push them to the gh-pages branch. Wouldn’t it be nice if every time you pushed your code to master, you could push just the _site directory to gh-pages, and thus ensure that your documentation was always up to date with your application code?

It turns out some smart GitHub users have suggested using git subtree push to push a subdirectory in your repo to gh-pages. My addition to the recipe is putting this code in a pre-push hook that runs only when you push to master.

If you’d like to do the same, put this code into .git/hooks/pre-push.

#!/bin/bash

# push _site directory to gh-pages
while read oldrev newrev refname
do
  branch=$(git rev-parse --symbolic --abbrev-ref $refname)
  if [ "$branch" == "master" ]; then
    git subtree push --prefix _site origin gh-pages
  fi
done

printf "\n"

Enjoy =)