    <p> First, I create a Git repository some place on the server. This
      is the Git repo that's going to be populated with your content,
      but it doesn't have to be in a world-viewable location on your
      server. Instead, you can place this anywhere, and then use a Git
      hook or a cronjob to copy files from it to a world-viewable
      directory. I don't cover that here. I refer to this location as
      the staging directory.</p>
    <p> Next, create a bare repository on your server. In its hooks
      directory, create a shell script called post-receive:</p>
    <pre>#!/usr/bin/bash
#
while read oldrev newrev refname
do
       BR=`git rev-parse --symbolic --abbrev-ref $refname`
       if [ "$BR" == "master" ]; then
               WEB_DIR="/my/staging/dir"
               export GIT_DIR="$WEB_DIR/.git"
               pushd $WEB_DIR &gt; /dev/null
               git pull
               popd &gt; /dev/null
       fi
done 
</pre>
    Now when you push to your bare repository, you are triggering the
    post-receive script to run, which in turn triggers a git pull in
    your staging directory.
    <p> Once your staging directory contains the content you want to
      distribute, you can copy them to live directories, or you could
      make your staging directory live (remember to exclude the .git
      directory though), or whatever you want.</p>
    <p> For gopher, I create a file listing by date using a shell
      script:</p>
    <pre>#!/usr/bin/bash
SED=/usr/bin/sed
DIR_BASE=/my/live/dir
DIR_LIVE=blog
DIR_STAGING=staging
DATE=${DATE:-`date --rfc-3339=date`}
for POST in `find "$DIR_BASE"/"$DIR_STAGING" \
-type f -name "item.md" -exec grep -Hl "$DATE" {} \;`;
do 
POSTDIR=`dirname "$POST"`
cp "$POST" "$DIR_BASE"/"$DIR_LIVE"/`basename $POSTDIR`.txt
echo -e 0Latest'\t'../"$DIR_LIVE"/`basename $POSTDIR`.txt &gt; /tmp/updater.tmp

echo -e 0"$DATE" `basename $POSTDIR`'\t'../"$DIR_LIVE"/`basename $POSTDIR`.txt \
&gt;&gt; /tmp/updater.tmp
"${SED}" -i "/0Latest/ r /tmp/updater.tmp" "$DIR_BASE"/date/gophermap
"${SED}" -i '0,/0Latest/{/0Latest/d;}' "$DIR_BASE"/date/gophermap
/usr/bin/rm /tmp/updater.tmp
done 
</pre>