This site is created with Hugo , a static website generator written in Go . As a learning exercise, I’m writing the necessary HTML templates by hand as I go along, which probably explains some of the weirdness.
This website is deployed from a git repository. When I push new
commits, the repository on the server runs a post-receive
hook that
checks out the contents and executes hugo
on it:
#!/bin/bash
export GIT_DIR`~/hugo/.git
export GIT_WORK_TREE`~/hugo
git checkout -f
${HOME}/bin/hugo -s ~/hugo -d ~/Public
Note that ~/hugo/.git
was first created as a bare
git repository
(via git init --bare ~/hugo/.git
) on the server and added as a remote to my
local git repo where all the editing of these pages happens. The forced git checkout to ~/hugo
(via the GIT_WORK_TREE
environment variable) makes it look like a
regular repo. The work tree is however unregistered:
localhost:~/hugo$ git status
fatal: this operation must be run in a work tree
If enableGitInfo
is set to true
in config.toml
, hugo will try to
get page timestamps from git. If the GIT_DIR
environment variable
wouldn’t be set to ~/hugo/.git
, building the site would fail:
ERROR 2022/08/17 19:34:36 Failed to read Git log: fatal: not a git repository: '.'
Together with enableGitInfo = true
in config.toml
, I also get page
modification timestamps for free.
To sum up, any local changes that I commit to my local repo will automagically be published once I push to the server remote.