En BooleanBite, hemos mostrado varios tutoriales sobre como utilizar git o github. En ellos hemos visto como utilizar repositorios Git alojados en Github o en cualquier otro repositorio. Sin embargo, a veces es necesario poder realizar algunas tareas que puedan ayudarnos en los desarrollos utililzando Git.
Aunque hay muchas herramientas para hacer esto, como pueden ser motores de Integración Continua como Jenkins o similar, Git también trae una opción de poder realizar acciones cuando se trabajan con repositorios Git. Estos son los llamados git-hooks, y los utilizaremos para por ejemplo poder subir los cambios de nuestro repositorio a un servidor.
En este artículo solo vamos a abordar los git-hooks a nivel de cliente. Existen otros tipos de Git-Hook pero los abordaremos en otro artículo. En primer lugar, tenemos que saber donde podemos encontrar los scripts necesarios para poder crear el git-hook. Estos pueden encontrarse dentro de la carpeta de metadatos de un repositorio git (.git), en esta carpeta veremos otra carpeta llamada hooks; esta carpeta contendrá los scripts necesarios para crear el hook.
Podemos crear un script por cada proceso que podemos hacer en Git. Seguidamente mostramos una tabla con los distintos procesos que podemos crear.
Git-Hook | Comando Git | Descripción |
---|---|---|
applypatch-msg | git am | Cuando se cambia el mensaje de un parche |
pre-applypatch | git am | Antes de aplicar un parche |
post-applypatch | git am | Después de aplicar un parche |
pre-commit | git commit | Antes de realizar un commit |
prepare-commit-msg | git commit | Cuando se establece el mensaje de un commit |
commit-msg | git commit | Cuando se establece el mensaje de un commit |
post-commit | git commit | Después de realizar commit. |
pre-rebase | git rebase | Antes de realizar un rebase o merge |
post-checkout | git checkout | Después de realizar un Checkout. |
post-merge | git merge | Tras realizar un merge. |
pre-push | git push | Antes de realizar un Push |
pre-receive | git push | Al realizar un push y obtener los datos del repo remoto. |
update | git push | Al actualizar los datos del remoto en un push. |
post-receive | git push | Al terminar de actualizar todos los datos del remoto. |
post-update | git push | Al actualizar todos los datos tras realizar el push |
push-to-checkout | git push | Al actualizar las referencias locales tras realizar push |
pre-auto-gc | git gc | Al llamar al recolector de basura de git. |
post-rewrite | git commit --amend | Al realizar un commit con --ammend (sobrescribir). |
sendmail-validate | git send-mail | Al mandar un correo con git. |
fsmonitor-watchman |
Tras ver los hooks, que podemos utilizar, vamos a ver un ejemplo. Vamos a crear primero un repositorio git vacio; para ello, ejecutamos el siguiente comando:
$ git init
Tras crear el repositorio git, vamos a ir a la carpeta .git/hooks. Y allí vamos a crear el fichero llamado pre-push, con el siguiente contenido:
#!/bin/bash
cp index.html /var/www/html
En este ejemplo copia el contenido de un fichero en la carpeta /var/www/html (por ejemplo para subir a un servidor web).
Si probamos a realizar un push, veremos como se ejecuta este script y se modifica correctamente el fichero html.
Sé el primero en comentar en «Automatizar Tareas con Git : Git Hooks»