Você pode fazer isso no git nativo com um gancho de pós-recebimento. Desde que você não deveria estar empurrando para um repositório não-nu, você precisará de um script ao longo das linhas deste
#!/bin/sh
target="/tmp/math"
exec > "$target/$(date +%s)_$(uuidgen).log" 2>&1
mkdir -p "$target"
GIT_WORK_TREE="$target" git checkout -f
cd "$target"
make
Coloque isso em hooks/post-receive
dentro do repositório nu, e você deve estar pronto (note que isso não irá criar $TARGET_DIR
, você terá que fazer isso manualmente)