Bonjour le monde
Pre-commit est un outil simple et puissant dans l'arsenal des outils Git que tout developpeur moderne devrait avoir. Aujourd'hui nous allons y faire une petite introduction.
Table des matières
Introduction
Les hooks git sont des scripts utiles pour identifier les problèmes simples avant de les soumettre à la révision du code. Pre-commit execute les hooks sur chaque commit pour signaler automatiquement les problèmes dans le code tels que les points-virgules manquants, les espaces blancs de fin et les instructions de débogage. En signalant ces problèmes avant la révision du code, cela permet à un réviseur de code de se concentrer sur l'architecture d'un changement sans perdre de temps avec des astuces de style trivial.
Pre-commit a été crée pour résoudre les problèmes de hook. Il s'agit d'un gestionnaire de packages multilangage pour les hooks de pré-validation. Vous spécifiez une liste de hooks que vous souhaitez et pré-commit gère l'installation et l'exécution de n'importe quel hook écrit dans n'importe quelle langage avant chaque commit. Pre-commit est spécialement conçu pour ne pas nécessiter d'accès root. Si l'un de vos développeurs n'a pas NodeJS installé, par exemple, mais modifie un fichier JavaScript, pre-commit gère automatiquement le téléchargement et l'installation du nœud pour exécuter eslint sans root.
Installation
Puisque pre-commit est un package Python, pour l'installer il suffit de faire:
pip install pre-commit
Ou alors vous pouvez juste ajouter pre-commit dans votre fichier requirements.txt
Si vous utilisez la distribution Anaconda, il suffit de faire:
conda install -c conda-forge pre-commit
Utilisation
1. Ajouter une configuration
- créer un fichier nommé .pre-commit-config.yaml
- vous pouvez générer une configuration très basique en utilisant
pre-commit sample-config - cet exemple utilise un formateur pour le code python, cependant pre-commit fonctionne pour n'importe quel langage de programmation
- d'autres hooks sont disponibles
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/psf/black
rev: 19.3b0
hooks:
- id: black
2. Installez les scripts git hook
- exécutez
pre-commit installpour configurer les scripts git hook
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
- maintenant pre-commit s'exécutera automatiquement sur git commit
3. Tester sur les fichiers existants
- c'est généralement une bonne idée d'exécuter les hooks sur tous les fichiers lors de l'ajout de nouveaux hooks (généralement pre-commit ne s'exécutera que sur les fichiers modifiés pendant les hooks git)
$ pre-commit run --all-files
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Initializing environment for https://github.com/psf/black.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for https://github.com/psf/black.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Check Yaml...............................................................Passed
Fix End of Files.........................................................Passed
Trim Trailing Whitespace.................................................Failed
- hook id: trailing-whitespace
- exit code: 1
Files were modified by this hook. Additional output:
Fixing sample.py
black....................................................................Passed
N'oubliez pas de visiter le site officiel https://pre-commit.com/ pour en savoir d'avantage.
Allez c'est déjà la fin de ce tuto sur pre-commit. Je vous préparerais bientot un deuxième article sur pre-commit pour vous des configurations avancées. Pour l'instant digérez celui-ci! Comme d'habitude si vous avez aimé l'article n'oubliez pas de likez et si vous avez une question, une remarque ou une correction les commentaires sont là pour vous.
No comments yet. Be the first to comment!