Sphinx et git¶
L’organisation de la documentation sous Sphinx avec sa logique de fichiers source en rst se prête très bien à l’utilisation d’un gestionnaire de version comme git.
Pour que l’intégration soit complète, le programme hook suivant permet de déclencher la compilation des sources lors d’un push concernant la branche master (on peut facilement renommer la branche concernée).
Fichier .git/hooks/post-update
:
#!/bin/zsh
branch=${1##*/}
echo Update to $branch
if [ $branch = "master" ] ; then
cd ..
export GIT_DIR=`pwd`/.git
git reset --hard master
make html
fi
Le point le plus subtil est la ligne export GIT_DIR=`pwd`/.git
qui permet
d’éviter l’erreur suivante
remote: fatal: Not a git repository: '.'
La copie de travail du dépot git ne doit servir qu’à la publication du site html
issu de la compilation Sphinx. C’est pour cela qu’on fait un git reset
--master
.
Enfin, pour autoriser le push vers ce dépôt non-bare, on ajoute la rubrique
suivante au fichier .git/config
:
[receive]
denyCurrentBranch = ignore
Limiter à une branche¶
Dans l’exemple suivant, seul un commit sur la branche dtp est accepté.
Fichier .git/hooks/pre-receive
:
#!/bin/zsh
read line
a=(${=line})
branch=${a[3]##*/}
echo "Attempt to push to branch $branch"
if [ $branch != "dtp" ] ; then
echo Error : branch "dtp" only
exit 1
fi