Documentos de Académico
Documentos de Profesional
Documentos de Cultura
web
1
TEMA 1.
Sistemas de Control de
Versiones.
Git hooks
2
Índice
➔
Hooks
●
Hooks de cliente
Cómo crearlos
Tipos de hooks locales
➢
pre-commit
➢
prepare-commit-message
➢
commit-msg
➢
post-commit
➢
pre-push
➢
post-checkout y post-merge
Hooks en proyectos colaborativos
3
Hooks
Git dispone de mecanismos que le permiten ejecutar scripts cuando se
producen ciertos eventos. A estos se les denomina hooks o ganchos.
➔
Existen de dos tipos:
●
De cliente (locales). Se ejecutan ante cambios en nuestro repositorio local
(commit, merge por ejemplo).
●
De servidor. Se ejecutan al producirse cambios en el repositorio remoto
(push principalmente).
https://git-scm.com/docs/githooks
4
Hooks de cliente
Los hooks de cliente residen en el directorio .git/hooks/ de cada repositorio de
Git. Git crea automáticamente este directorio con scripts de ejemplo cuando
inicializa un repositorio Es importante tener en cuenta que los hooks
del lado del cliente no se copian cuando se
clona un repositorio
5
Hooks de cliente
Los archivos predeterminados se escriben como scripts de shell, pero puede
utilizarse cualquier lenguaje de scripting con el que estemos familiarizados,
siempre que se pueda ejecutar como ejecutable. Esto incluye Bash, Python,
Ruby, Perl, Rust, Swift y Go.
Al crear nuestros hooks, sólo debemos definir el idioma usando el signo (#!)
para que Git sepa cómo interpretar los scripts posteriores.
6
Hooks de cliente
Tipos de hooks
7
Hooks de cliente
pre-commit
Se ejecuta cada vez que realizamos un commit en git antes de que Git nos pida el
mensaje de confirmación
Perfecto para ejecutar un
linter de código o verificar
si se va a subir un fichero
que no se debía.
8
Hooks de cliente
prepare-commit-msg
Se ejecuta después del anterior hook y permite mostrarnos el mensaje de
commit a añadir a nuestros cambios
Perfecto para modificar
el mensaje de commit si
queremos añadir algo de
forma automática
9
Hooks de cliente
prepare-commit-msg
Recibe 3 parámetros de entrada:
➔
El nombre del fichero que contiene el fichero temporal con el mensaje de
commit
➔
El tipo de commit:
- m si es un mensaje normal
-t si es un template
merge si el mensaje se hereda fruto de un merge
squash si estamos haciendo un commit sobre otro
➔
El hash SHA1 del commit. Sólo se establece si en la instrucción de commit
se añade la opción -c
10
Hooks de cliente
commit-msg
Similar al anterior pero se ejecuta tras haber introducido el mensaje de commit.
11
Hooks de cliente
prepare-commit-msg
Recibe 1 parámetros de entrada:
➔
El nombre del fichero que contiene el fichero temporal con el mensaje de
commit
12
Hooks de cliente
post-commit
Ejecutado tras realizar el commit, no puede anular el mensaje y, por este motivo,
suele utilizarse para realizar notificaciones.
13
Hooks de cliente
pre-push
Se ejecuta tras llamar al comando git push y ocurre antes de que se haya
transferido ningún objeto al repositorio remoto. Desde este script puedes evitar
que el push se realice si devuelves un código de error
14
Hooks de cliente
post-checkout y post-merge
Estos dos hooks son ejecutados tras realizar un git checkout y git merge
respectivamente.
La utilidad más interesante que pueden tener es la de limpiar el directorio de
trabajo o realizar la instalación del proyecto, tras realizar un checkout, o el de
limpiar las ramas que ya no se usan tras realizar un merge.
15
Hooks de cliente
16
Hooks en proyectos colaborativos
post-checkout y post-merge
Mantener hooks para un equipo de desarrolladores puede ser un poco
complicado porque el directorio .git/hooks no se clonará con el resto de nuestro
proyecto
Una solución simple es almacenar nuestros hooks en el directorio del proyecto
real (arriba del directorio .git) e instalarlos creando un enlace simbólico a ellos
en .git/hooks, o simplemente los copiaremos y pegaremos en el directorio
.git/hooks siempre que se actualice algún hook.
17