Keeping GitHub pages up to date with your master
For the RESTXQ specification
that I am working on as part of my EXQuery efforts,
I need to write up a "formal" specification for RESTXQ.
The EXQuery RESTXQ code base lives on GitHub
(http://github.com/exquery/exquery),
and the specification has been authored in the exquery-restxq-specification
module.
The RESTXQ specification is authored in HTML using Robin Berjon's excellent ReSpec tool. As specifications are arguably meant to be read by people, it would be nice if we could present the work in progress from the source repository to users as a web page.
Fortunately GitHub provides a nice facility for web pages called
GitHub Pages.
However, the pages are taken from a branch of your GitHub repository called gh-pages
. The
advantage of this is that your 'pages' can contain different content to your main
source code
base (i.e. your master
branch). If your page content is in your master
branch though, you need a facility for keeping the copy in your gh-pages
branch up to date
with your commits to master
.
I will not detail how to setup GitHub pages, that is better covered here.
I simply wanted to be able to keep a single folder called exquery-restxq-specification
from master
in sync with my gh-pages
. When creating my
gh-pages
repository, following the instructions
above,
rather than delete everything in the gh-pages
branch, I deleted everything except
the exquery-restxq-specification
folder, and then committed and pushed.
To keep the folder in sync across both branches, we can add a post-commit hook locally
to the master
branch,
so that when we commit changes to that folder in master
, the changes are propagated to the
gh-pages
branch.
To add the post-commit hook, create the script: your-repo/.git/hooks/post-commit
#!/bin/sh git checkout gh-pages #switch to gh-pages branch git checkout master -- exquery-restxq-specification #checkout just the exquery-restxq-specification folder from master git commit -m "Merge in of specification from master branch" #commit the changes # git push #uncomment if you want to auto-push git checkout master #switch back to the master branchIf you are on Linux/MacOSX/Unix, you must ensure that the script has execute permissions, otherwise Git will not execute it.
Now simply changing something in the exquery-restxq-specification
folder in
the master
branch and committing, will cause Git to also sync the changes
to the gh-pages
branch.
As a further exercise it might be interesting
to take the commit message for gh-pages
from the last commit
message of master
...
Adam Retter posted on Sunday, 19th August 2012 at 12.03 (GMT+01:00)
Updated: Sunday, 19th 2012 at August 12.03 (GMT+01:00)