-
1. DĂ©marrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DĂ©mon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SĂ©lection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RĂ©Ă©crire lâhistorique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 DĂ©boguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systĂšmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables dâenvironnement
- 10.9 Résumé
-
A1. Annexe A: Git dans dâautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture dâinstantanĂ© basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise Ă jour de projets
- A3.6 Inspection et comparaison
- A3.7 DĂ©bogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĂšmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
8.3 Personnalisation de Git - Crochets Git
Crochets Git
Comme de nombreux autres systĂšmes de gestion de version, Git dispose dâun moyen de lancer des scripts personnalisĂ©s quand certaines actions importantes ont lieu. Il y a deux groupes de crochets : ceux cĂŽtĂ© client et ceux cĂŽtĂ© serveur. Les crochets cĂŽtĂ© client concernent les opĂ©rations de client telles que la validation et la fusion. Les crochets cĂŽtĂ© serveur concernent les opĂ©rations de serveur Git telles que la rĂ©ception de commits. Vous pouvez utiliser ces crochets pour toutes sortes de fonctions.
Installation dâun crochet
Les crochets sont tous stockés dans le sous-répertoire hooks
du répertoire Git.
Dans la plupart des projets, câest .git/hooks
.
Par dĂ©faut, Git popule ce rĂ©pertoire avec quelques scripts dâexemple dĂ©jĂ utiles par eux-mĂȘmes ; mais ils servent aussi de documentation sur les paramĂštres de chaque script.
Tous les exemples sont des scripts shell avec un peu de Perl mais nâimporte quel script exĂ©cutable nommĂ© correctement fonctionnera.
Vous pouvez les Ă©crire en Ruby ou Python ou ce que vous voudrez.
Pour les versions de Git postĂ©rieures Ă 1.6, ces fichiers crochet dâexemple se terminent en .sample
et il faudra les renommer.
Pour les versions de Git antĂ©rieures Ă 1.6, les fichiers dâexemple sont nommĂ©s correctement mais ne sont pas exĂ©cutables.
Pour activer un script de crochet, placez un fichier dans le sous-répertoire hook
de votre répertoire Git, nommé correctement et exécutable.
Ă partir de ce moment, il devrait ĂȘtre appelĂ©.
Abordons donc les noms de fichiers de crochet les plus importants.
Crochets cÎté client
Il y a de nombreux crochets cÎté client. Ce chapitre les classe entre crochets de traitement de validation, scripts de traitement par courriel et le reste des scripts cÎté client.
Note
|
Il est important de noter que les crochets cĂŽtĂ© client ne sont pas copiĂ©s quand le dĂ©pĂŽt est clonĂ©. Si vous avez lâintention dâutiliser ces scripts pour faire respecter une politique de validation, il vaut mieux utiliser des crochets cĂŽtĂ© serveur, comme Exemple de politique gĂ©rĂ©e par Git. |
Crochets de traitement de validation
Les quatre premiers crochets ont trait au processus de validation.
Le crochet pre-commit
est lancĂ© en premier, avant mĂȘme que vous ne saisissiez le message de validation.
Il est utilisĂ© pour inspecter lâinstantanĂ© qui est sur le point dâĂȘtre validĂ©, pour vĂ©rifier si vous avez oubliĂ© quelque chose, pour sâassurer que les tests passent ou pour examiner ce que vous souhaitez inspecter dans le code.
Un code de sortie non nul de ce crochet annule la validation, bien que vous puissiez le contourner avec git commit --no-verify
.
Vous pouvez rĂ©aliser des actions telles quâune vĂ©rification de style (en utilisant lint ou un Ă©quivalent), dâabsence de blancs en fin de ligne (le crochet par dĂ©faut fait exactement cela) ou de documentation des nouvelles mĂ©thodes.
Le crochet prepare-commit-msg
est appelĂ© avant que lâĂ©diteur de message de validation ne soit lancĂ© mais aprĂšs que le message par dĂ©faut a Ă©tĂ© crĂ©Ă©.
Il vous permet dâĂ©diter le message par dĂ©faut avant que lâauteur ne le voit.
Ce crochet accepte quelques options : le chemin du fichier qui contient le message de validation actuel, le type de validation et le SHA-1 du commit si câest un commit amendĂ©.
Ce crochet ne sert généralement à rien pour les validations normales.
Par contre, il est utile pour les validations oĂč le message par dĂ©faut est gĂ©nĂ©rĂ©, tel que les modĂšles de message de validation, les validations de fusion, les commits Ă©crasĂ©s ou amendĂ©s.
Vous pouvez lâutiliser en conjonction avec un modĂšle de messages pour insĂ©rer de lâinformation par programme.
Le crochet commit-msg
accepte un paramĂštre qui est encore le chemin du fichier temporaire qui contient le message de validation actuel.
Si ce script sort avec un code de sortie non nul, Git abandonne le processus de validation, ce qui vous permet de vĂ©rifier lâĂ©tat de votre projet ou du message de validation avant de laisser passer un commit.
Dans la derniĂšre section de ce chapitre, lâutilisation de ce crochet permettra de vĂ©rifier que le message de validation est conforme Ă un format obligatoire.
AprĂšs lâexĂ©cution du processus complet de validation, le crochet post-commit
est appelé.
Il nâaccepte aucun argument mais vous pouvez facilement accĂ©der au dernier commit grĂące Ă git log -1 HEAD
.
Généralement, ce script sert à réaliser des notifications ou des choses similaires.
Crochets de gestion courriel
Vous pouvez régler trois crochets cÎté client pour la gestion à base de courriel.
Ils sont tous invoqués par la commande git am
, donc si vous nâĂȘtes pas habituĂ© Ă utiliser cette commande dans votre mode de gestion, vous pouvez simplement passer la prochaine section.
Si vous acceptez des patchs préparés par git format-patch
par courriel, alors certains de ces crochets peuvent vous ĂȘtre trĂšs utiles.
Le premier crochet lancé est applypatch-msg
.
Il accepte un seul argument : le nom du fichier temporaire qui contient le message de validation proposé.
Git abandonne le patch si ce script sort avec un code non nul.
Vous pouvez lâutiliser pour vĂ©rifier que le message de validation est correctement formatĂ© ou pour normaliser le message en lâĂ©ditant sur place par script.
Le crochet lancĂ© ensuite lors de lâapplication de patchs via git am
sâappelle pre-applypatch
.
Il nâaccepte aucun argument et son nom est trompeur car il est lancĂ© aprĂšs que le patch a Ă©tĂ© appliquĂ©, ce qui vous permet dâinspecter lâinstantanĂ© avant de rĂ©aliser la validation.
Vous pouvez lancer des tests ou inspecter lâarborescence active avec ce script.
Sâil manque quelque chose ou que les tests ne passent pas, un code de sortie non nul annule la commande git am
sans valider le patch.
Le dernier crochet lancĂ© pendant lâopĂ©ration git am
sâappelle post-applypatch
.
Vous pouvez lâutiliser pour notifier un groupe ou lâauteur du patch que vous venez de lâappliquer.
Vous ne pouvez plus arrĂȘter le processus de validation avec ce script.
Autres crochets cÎté client
Le crochet pre-rebase
est invoquĂ© avant que vous ne rebasiez et peut interrompre le processus sâil sort avec un code dâerreur non nul.
Vous pouvez utiliser ce crochet pour empĂȘcher de rebaser tout commit qui a dĂ©jĂ Ă©tĂ© poussĂ©.
Câest ce que fait le crochet dâexemple pre-rebase
que Git installe, mĂȘme sâil fait des hypothĂšses qui peuvent ne pas correspondre avec votre façon de faire.
Le crochet post-rewrite
est lancé par les commandes qui remplacent les commits, comme git commit --amend
et git rebase
(mais pas par git filter-branch
).
Son seul argument est la commande qui a déclenché la réécriture, et il reçoit une liste de réécritures sur stdin
.
Ce crochet a beaucoup des mĂȘmes utilisations que les crochets post-checkout
et post-merge
.
AprÚs avoir effectué avec succÚs un git checkout
, le crochet post-checkout
est lancé.
Vous pouvez lâutiliser pour paramĂ©trer correctement votre environnement projet dans votre copie de travail.
Cela peut signifier y déplacer des gros fichiers binaires que vous ne souhaitez pas voir en gestion de source, générer automatiquement la documentation ou quelque chose dans le genre.
Le crochet post-merge
sâexĂ©cute Ă la suite dâune commande merge
réussie.
Vous pouvez lâutiliser pour restaurer certaines donnĂ©es non gĂ©rĂ©es par Git dans la copie de travail telles que les informations de permission.
Ce crochet permet mĂȘme de valider la prĂ©sence de fichiers externes au contrĂŽle de Git que vous pourriez souhaiter voir recopiĂ©s lorsque la copie de travail change.
Le crochet pre-push
est lancé pendant un git push
, aprÚs la mise à jour des références distantes mais avant le transfert des objets.
Il reçoit le nom et lâemplacement du dĂ©pĂŽt distant en paramĂštre et une liste des rĂ©fĂ©rences qui seront mises Ă jour sur stdin
.
Il peut servir Ă valider un ensemble de mises Ă jour de rĂ©fĂ©rences avant que la poussĂ©e nâait rĂ©ellement lieu (la poussĂ©e est abandonnĂ©e sur un code de sortie non nul).
Git lance de temps Ă autre le ramasse-miettes au cours de son fonctionnement en invoquant git gc --auto
.
Le crochet pre-auto-gc
est invoquĂ© juste avant le dĂ©marrage du ramasse-miettes et peut ĂȘtre utilisĂ© pour vous en notifier ou pour annuler le ramasse-miettes si le moment ne sây prĂȘte pas.
Crochets cÎté serveur
En complément des crochets cÎté client, vous pouvez utiliser comme administrateur systÚme quelques crochets cÎté serveur pour appliquer quasiment toutes les rÚgles de votre projet.
Ces scripts sâexĂ©cutent avant et aprĂšs chaque poussĂ©e sur le serveur.
Les crochets pre
peuvent rendre un code dâerreur non nul Ă tout moment pour rejeter la poussĂ©e et afficher un message dâerreur au client.
Vous pouvez mettre en place des rĂšgles aussi complexes que vous le souhaitez.
pre-receive
Le premier script lancĂ© lors de la gestion dâune poussĂ©e depuis un client est pre-receive
.
Il accepte une liste de références lues sur stdin.
Sâil sort avec un code dâerreur non nul, aucune nâest acceptĂ©e.
Vous pouvez utiliser ce crochet pour rĂ©aliser des tests tels que sâassurer que toutes les rĂ©fĂ©rences mises Ă jour le sont en avance rapide ou pour sâassurer que lâutilisateur dispose bien des droits de crĂ©ation, poussĂ©e, destruction ou de lecture des mises Ă jour pour tous les fichiers quâil cherche Ă mettre Ă jour dans cette poussĂ©e.
update
Le script update
est trĂšs similaire au script pre-receive
, Ă la diffĂ©rence quâil est lancĂ© une fois par branche qui doit ĂȘtre modifiĂ©e lors de la poussĂ©e.
Si la poussĂ©e sâapplique Ă plusieurs branches, pre-receive
nâest lancĂ© quâune fois, tandis qu'`update` est lancĂ© une fois par branche impactĂ©e.
Au lieu de lire Ă partir de stdin, ce script accepte trois arguments : le nom de la rĂ©fĂ©rence (branche), le SHA-1 du commit pointĂ© par la rĂ©fĂ©rence avant la poussĂ©e et le SHA-1 que lâutilisateur est en train de pousser.
Si le script update
se termine avec un code dâerreur non nul, seule la rĂ©fĂ©rence est rejetĂ©e.
Les autres rĂ©fĂ©rences pourront ĂȘtre mises Ă jour.
post-receive
Le crochet post-receive
est lancĂ© aprĂšs lâexĂ©cution complĂšte du processus et peut ĂȘtre utilisĂ© pour mettre Ă jour dâautres services ou pour notifier des utilisateurs.
Il accepte les mĂȘmes donnĂ©es sur stdin que pre-receive
.
Il peut par exemple envoyer un courriel Ă une liste de diffusion, notifier un serveur dâintĂ©gration continue ou mettre Ă jour un systĂšme de suivi de tickets.
Il peut aussi analyser les messages de validation Ă la recherche dâordres de mise Ă jour de lâĂ©tat des tickets.
Ce script ne peut pas arrĂȘter le processus de poussĂ©e mais le client nâest pas dĂ©connectĂ© tant quâil nâa pas terminĂ©.
Il faut donc ĂȘtre prudent Ă ne pas essayer de lui faire rĂ©aliser des actions qui peuvent durer longtemps.
Astuce
|
Si vous Ă©crivez un script/crochet que dâautres devront lire, prĂ©fĂ©rez les versions longues des drapeaux de ligne de commande ; six mois plus tard, vous nous remercierez. |