Dans cette partie, je vais vous parler de choses plus poussées, que l'on n'utilise pas à chaque fois que l'on fait un dépôt Git avec gitosis, il s'agit des
hooks.
Mais qu'est-ce donc, cet animal ? Nous allons commencer par cela avant de voir comment on peut les mettre en place.

Il est nécessaire de savoir faire des scripts shell pour suivre cette partie.
Un... quoi ?
Un hook, qu'est-ce donc en informatique ?
Eh bien, ça permet à l'utilisateur d'un logiciel d'en personnaliser le fonctionnement en lui faisant exécuter des actions supplémentaires à des moments déterminés.
Gitosis prévoit justement une panoplie complète de hooks pour réaliser plusieurs choses assez sympathiques dont je donnerai quelques exemples dans la partie pratique.

Par défaut, avec notre gitosis adoré, les fichiers des hooks sont remplis d'exemples et sont désactivés.
Avec gitosis, les hooks se trouvent dans le home de l'utilisateur git.
Par exemple, pour votre dépôt "
repo", les hooks seront dans
/home/git/repositories/repo.git/hooks/ (les parties pouvant varier selon la façon dont vous avez configuré gitosis sont en rouge).
Avant de faire un hook, nous allons voir les deux hooks souvent utilisés dans la pratique, ainsi que leur fonction :
| Nom | Fonction |
|---|
| post-commit |
Il est appelé quand un commit a été effectué. |
| pre-commit |
Appelé avant un commit, il a le pouvoir de l'arrêter si le script retourne une valeur différente de zéro. |
Ce n'est pas une liste exhaustive, il en existe d'autres.
Pour les connaître, je vous propose d'afficher la liste des fichiers de votre répertoire contenant les hooks. Chaque fichier contient un commentaire décrivant les paramètres, quand il est appelé, ainsi que d'autres détails du genre.
Péchons le poisson !
Pour explication du titre, en anglais, hook signifie crochet ou hameçon.
Bon : maintenant, on sait ce qu'est un hook, on sait qu'il y en a avec gitosis.
Hmm, ma foi, je pense qu'on est prêt à commencer !

J'ai pensé que la meilleure façon d'apprendre était de générer un exemple codé au fur et à mesure, ainsi qu'un petit exercice.
Pour mon exemple, je travaillerai sur le fichier "post-commit" (tandis que l'exercice portera sur l'autre fichier dont je vous ai parlé, "pre-commit").
Exemple
Comme exemple, je vous propose tout simplement un dépôt qui, quand il reçoit une nouvelle révision, fait automatiquement une mise à jour sur un site quelconque.
Inconvénient : il faut que le site soit hébergé sur le même serveur.
Avantage : coder devient plus confortable.
Comment faire ?
Tout d'abord, on va aller dans le répertoire qui va accueillir votre site (public_html, par exemple

) et prendre le dépôt :
Code : Console | git init
git remote add origin git@127.0.0.1:repo.git
git push origin master:refs/heads/master |
Il faut ensuite activer le hook en renommant le fichier
post-commit.sample en
post-commit et lui donner les droits d'exécution (
chmod +x post-commit) !
Voilà : quand quelqu'un fera un commit, le script sera exécuté, et la moitié du travail est effectuée !
Pour finir notre exemple, il vous suffit de réaliser le contenu du fichier :
Code : Bash | #!/bin/bash
chemin="/chemin/de/notre/repo.git/" # Chez moi, /home/git/public_html/
avant=`pwd`
cd "$chemin"
git pull
cd "$avant"
|
Attention aux problèmes de droits !
Et voilà, vous avez un dépôt qui s'
auto-update à chaque commit, donc un site qui se modifie par Git !
