Dans le cadre d'un projet d'application web, j'utilise la possibilité qu'offre GitHub de pouvoir visualiser les fichiers contenus dans la branche gh-pages
comme des pages web. Cela signifie concrètement que le contenu de la branche https://github.com/pierrepo/DensiPara/tree/gh-pages sera visible à l'adresse http://pierrepo.github.io/DensiPara/.
Comme master
est la branche principale de mon projet, j'étais amené en permanence à resynchroniser ma branche gh-pages
avec master
:
git checkout gh-pages
git rebase master
git push
git checkout master
Pour automatiser cela, j'ai appliqué :
- un hook
post-commit
qui après chaque nouveau commit sur la branchemaster
va synchroniser la branchegh-pages
avecmaster
- une modification du fichier
.git/config
pour faire un push simultané des branchesmaster
etgh-pages
Hook post-commit
Créer le fichier .git/hooks/post-commit
:
#!/bin/bash
set -eu
# sync 'gh-pages' branch with 'master' branch'
currentbranch=$(git symbolic-ref --short HEAD)
if [ "$currentbranch" == "master" ]
then
echo "post-commit hook: sync 'gh-pages' branch with master."
git checkout gh-pages
git rebase master
git checkout master
else
echo "post-commit hook: not in master branch ($currentbranch). Nothing to do."
fi
exit 0
puis le rendre exécutable :
chmod +x .git/hooks/post-commit
Je souhaite que ce hook ne fonctionne que dans la branche master
d'où le test dans le script.
Push master et gh-pages
Dans le fichier .git/config
, ajouter les lignes :
push = refs/heads/master:refs/heads/master
push = refs/heads/gh-pages:refs/heads/gh-pages
à la fin de la section [remote "origin"]
. Ce qui donne au final :
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:pierrepo/DensiPara.git
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/master
push = refs/heads/gh-pages:refs/heads/gh-pages
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "gh-pages"]
remote = origin
merge = refs/heads/gh-pages
Dès lors, dès que je réalise un commit dans la branche master
, celui-ci est automatiquement reporté dans la branche gh-pages
. Et dès que je fais un push
, ce sont les deux branches master
et gh-pages
qui sont envoyées sur GitHub.
PS : il est parfaitement possible de rendre la branche gh-pages
la branche par défaut sur GitHub, mais je souhaitais conserver master
comme branche principale par homogénéité avec mes autres projets.