-
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. |