Está en la página 1de 17

Despliegue de aplicaciones

web

Ciclo Formativo de Grado Superior


Despliegue de Aplicaciones Web
Modalidad semipresencial

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

La extensión .sample evita que se ejecuten de


forma predeterminada. Para "instalar" uno, todo
lo que tenemos que hacer es eliminar dicha
extensión y otorgarles permisos de ejecución.

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.

No se pasa ningún argumento al pre-commit script, y en caso que retornemos un


valor distinto de cero, anulamos el commit.

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.

Perfecto para comprobar


si el patrón del mensaje
de commit es correcto.

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

Perfecto para ejecutar una


batería de tests de forma que
evitemos que llegue a un
repositorio remoto cambios que
no pasan las pruebas

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.

Desde la versión 2.9 de GIT también podemos guardar nuestros hooks en


otro directorio distinto de .git/hooks y mediante la opción de configuración
siguiente podemos especificar a GIT la nueva ubicación de estos.
git config core.hooksPath hooks

17

También podría gustarte