Introducció
Git hooks són scripts que Git executa automàticament abans o després de certs esdeveniments, com ara commits, fusions i rebases. Aquests scripts permeten automatitzar tasques i personalitzar el comportament de Git segons les necessitats del teu projecte.
Tipus de Git Hooks
Hi ha dos tipus principals de Git hooks:
- Client-side hooks: S'executen en operacions locals com commits i merges.
- Server-side hooks: S'executen en operacions del servidor com rebre commits push.
Client-side Hooks
- pre-commit: S'executa abans de crear un commit. Pot ser utilitzat per verificar el codi o executar tests.
- prepare-commit-msg: S'executa abans que l'editor de missatges de commit s'obri. Pot ser utilitzat per modificar el missatge de commit predeterminat.
- commit-msg: S'executa després que l'editor de missatges de commit es tanqui. Pot ser utilitzat per validar el missatge de commit.
- post-commit: S'executa després de crear un commit. Pot ser utilitzat per enviar notificacions o actualitzar informació.
Server-side Hooks
- pre-receive: S'executa abans d'acceptar un push. Pot ser utilitzat per validar els canvis.
- update: S'executa després de pre-receive i abans de canviar cap referència. Pot ser utilitzat per validar referències específiques.
- post-receive: S'executa després d'acceptar un push. Pot ser utilitzat per desplegar codi o enviar notificacions.
Configurant Git Hooks
Els hooks es troben en el directori .git/hooks
del teu repositori. Per configurar un hook, simplement crea un fitxer executable en aquest directori amb el nom del hook que vols utilitzar.
Exemple: pre-commit Hook
A continuació, es mostra un exemple de com configurar un hook pre-commit
que verifica si el codi compleix amb l'estil de codificació PEP8 (per a Python).
-
Crea el fitxer del hook:
touch .git/hooks/pre-commit
-
Fes el fitxer executable:
chmod +x .git/hooks/pre-commit
-
Edita el fitxer del hook:
#! /bin/bash # pre-commit hook per verificar l'estil de codificació PEP8 # Verifica tots els fitxers Python for file in $(git diff --cached --name-only | grep '\.py$'); do if ! pep8 $file; then echo "Error: L'estil de codificació PEP8 no es compleix en $file" exit 1 fi done
Aquest script s'executarà abans de cada commit i verificarà que tots els fitxers Python compleixin amb l'estil de codificació PEP8. Si algun fitxer no compleix, el commit es cancel·larà i es mostrarà un missatge d'error.
Exercici Pràctic
Objectiu
Configura un hook commit-msg
que verifiqui que tots els missatges de commit continguin almenys 10 caràcters.
Passos
-
Crea el fitxer del hook:
touch .git/hooks/commit-msg
-
Fes el fitxer executable:
chmod +x .git/hooks/commit-msg
-
Edita el fitxer del hook:
#! /bin/bash # commit-msg hook per verificar la longitud del missatge de commit commit_msg_file=$1 commit_msg=$(cat $commit_msg_file) if [ ${#commit_msg} -lt 10 ]; then echo "Error: El missatge de commit ha de contenir almenys 10 caràcters." exit 1 fi
Solució
Aquest script s'executarà després que l'editor de missatges de commit es tanqui i verificarà que el missatge de commit contingui almenys 10 caràcters. Si no és així, el commit es cancel·larà i es mostrarà un missatge d'error.
Resum
Els Git hooks són una eina poderosa per automatitzar tasques i personalitzar el comportament de Git. En aquest tema, hem après sobre els diferents tipus de hooks, com configurar-los i hem vist exemples pràctics de com utilitzar-los. Amb aquesta informació, pots començar a crear els teus propis hooks per millorar el teu flux de treball amb Git.
Dominar Git: De Principiant a Avançat
Mòdul 1: Introducció a Git
Mòdul 2: Operacions Bàsiques de Git
- Creant un Repositori
- Clonant un Repositori
- Flux de Treball Bàsic de Git
- Preparant i Cometent Canvis
- Veient l'Historial de Commits
Mòdul 3: Branques i Fusió
- Entenent les Branques
- Creant i Canviant de Branques
- Fusionant Branques
- Resolent Conflictes de Fusió
- Gestió de Branques
Mòdul 4: Treballant amb Repositoris Remots
- Entenent els Repositoris Remots
- Afegint un Repositori Remot
- Recuperant i Traient Canvis
- Empenyent Canvis
- Seguint Branques
Mòdul 5: Operacions Avançades de Git
Mòdul 6: Eines i Tècniques de Git
Mòdul 7: Estratègies de Col·laboració i Flux de Treball
- Forking i Pull Requests
- Revisions de Codi amb Git
- Flux de Treball Git Flow
- GitHub Flow
- Integració Contínua amb Git
Mòdul 8: Millors Pràctiques i Consells de Git
- Escrivint Bons Missatges de Commit
- Mantenint un Historial Netejat
- Ignorant Fitxers amb .gitignore
- Millors Pràctiques de Seguretat
- Consells de Rendiment
Mòdul 9: Resolució de Problemes i Depuració
- Problemes Comuns de Git
- Desfent Canvis
- Recuperant Commits Perduts
- Tractant amb Repositoris Corruptes
- Tècniques Avançades de Depuració