Nota :
Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Vous gérez vos projets ou vos documents avec git, et vous vous demandez comment faire pour gérer vos sites web de même?
Une des fonctionnalités de Git que nous allons fortement utiliser est celle de «branches». Nous allons mettre en place un système de hooks2), pour faciliter l'intégration de notre flot de travail.
Nous allons considérer le schéma suivant, assez classique :
/srv/monsiteweb/www
(dossier inscriptible par toto)/srv/monsiteweb/www-dev
(dossier inscriptible par toto)Installer git sur le serveur et le client :
apt-get install git
Sur le serveur :
mkdir -p /srv/monsiteweb/www.git
mkdir www.git
git init --bare www.git
Sur le serveur :
vim /srv/monsiteweb/www.git/hooks/post-update
Le fichier doit contenir le code suivant :
#!/bin/sh for i in $* do b=$(basename $i) if [ "$b" = "prod" ] then # Remplacer le chemin par celui utilisé par le serveur web pour # la version en production GIT_WORK_TREE=/srv/monsiteweb/www/ git checkout -f $b fi if [ "$b" = "dev" ] then # Remplacer le chemin par celui utilisé par le serveur web pour # la version en développement GIT_WORK_TREE=/srv/monsiteweb/www-dev/ git checkout -f $b fi done
Le rendre exécutable :
chmod +x /srv/monsiteweb/www.git/hooks/post-update
Sur le client :
mkdir -p ~/projets/mon-site/
cd ~/projets/mon-site/
git clone toto@serveur:/srv/monsiteweb/www.git
Ces manipulations sont à faire sur client:
Cette branche est facultative et contient les sources du site web telles que fournies par son développeur.
cd ~/projets/mon-site/www
wget 'http://download.dokuwiki.org/src/dokuwiki/dokuwiki-oldstable.tgz' -O/tmp/dokuwiki-oldstable.tgz tar xf /tmp/dokuwiki-oldstable.tgz --strip-components 1
git add .
git commit -m 'Version initiale'
git branch -m master upstream
git push -u origin upstream
Cette branche est facultative et contient les sources du site web de développement. Un tel site est pratique pour mettre le code en test avant de le passer en production.
git checkout upstream
git branch dev
git checkout dev
rm README VERSION COPYING
git commit -a -m 'Préparation à la mise en test'
git push -u origin dev
Le hook de la branche dev devrait alors s'activer automatiquement et placer les sources dans le dossier de dev sur le serveur.
Cette branche correspond à la version en cours d'utilisation sur le serveur.
git checkout dev
git branch prod
git checkout prod
git push -u origin prod
Le hook de la branche prod devrait alors s'activer automatiquement et placer les sources dans le dossier de prod sur le serveur.
Comment intégrer les opérations de maintenance courantes avec la structure git définie.
Ou correction d'une fonctionnalité indésirable…
git checkout dev
git pull
git commit -a -m 'bug corrigé'
git push
git checkout master
git merge dev -m 'intégration de la correction de bug'
git push
git checkout upstream
git checkout upstream
rm -r *
wget 'http://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz' -O/tmp/dokuwiki-stable.tgz
tar xf /tmp/dokuwiki-stable.tgz --strip-components 1
git add --all .
git commit -a -m 'nouvelle version upstream: Binky (2013-12-08)'
git push
git checkout dev
git rebase upstream
git rm VERSION
git rebase --continue
git push --force
git checkout prod
git merge dev -m 'intégration de la nouvelle version upstream'
git push