¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Ejecutar una comprobación al hacer push

Después de esta lección: Puedo hacer que Git ejecute una comprobación antes de que un push siga adelante.

Lección de 60 min13 comandosLaboratorio de Git y Gitea: aprende clone, commit y push en un servidor Git propio

Frena un cambio roto antes de compartirlo

Un kiosco apunta sus precios en un archivo. Alguien borra el precio del té por error y hace push. Ahora todo el equipo tiene una lista rota.

Una comprobación que se ejecute al hacer push habría dicho que no. Los equipos reales usan comprobaciones así todo el día.

Al terminar esta lección

Nota

Puedo hacer que Git ejecute una comprobación antes de que un push siga adelante.

Palabras clave

PalabraQué significa
Ganchoun script que Git ejecuta en un momento fijo
Comprobaciónuna prueba que pasa o falla
Código de salidael número con que acaba un programa, 0 si fue bien
CIun servidor que ejecuta comprobaciones en cada push
Ejecutorla máquina que realiza el trabajo de una CI

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un gancho es un script que Git ejecuta

Git busca en la carpeta .git/hooks scripts con nombres fijos. Un script llamado pre-push se ejecuta justo antes de un push. Si termina con un código de salida distinto de cero, Git detiene el push.

El script debe ser ejecutable. Aquí la comprobación busca el precio del té en precios.txt.

Crea una carpeta compartida donde subir

Comando
git init --bare -b main compartido.git

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Clónala como puesto

Comando
git clone compartido.git puesto

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea un archivo con dos precios

Comando
printf 'Cafe 1.50\nTe 1.20\n' > puesto/precios.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe la comprobación

Comando
printf '#!/bin/sh\ngrep -q "Te" precios.txt || { echo "comprobacion fallida: falta el precio del Te"; exit 1; }\necho "comprobacion superada"\n' > puesto/.git/hooks/pre-push

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Hazla ejecutable

Comando
chmod +x puesto/.git/hooks/pre-push

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Prepara el archivo

Comando
git -C puesto add precios.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guárdalo en un commit

Comando
git -C puesto commit -m "Anadir precios"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Haz push y mira la comprobación

Comando
git -C puesto push -u origin main

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una comprobación fallida rechaza el push

Ahora rompe el archivo a propósito. Borra la línea del té y guarda el commit. La comprobación falla y Git rechaza el push, así que el commit roto se queda en tu ordenador.

Después cancelas el commit malo con git revert, que viste antes, y haces push otra vez.

Borra la línea del té

Comando
sed -i '/Te/d' puesto/precios.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guarda el error

Comando
git -C puesto commit -am "Quitar el te por error"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Intenta subirlo

Comando
git -C puesto push

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cancela el error

Comando
git -C puesto revert --no-edit HEAD

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Haz push otra vez

Comando
git -C puesto push

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que un gancho es parte del proyecto y que todo el equipo lo tiene. No es así. Un gancho vive en .git, y un clon no lo copia. Cualquiera puede saltárselo con --no-verify. Un equipo necesita la misma comprobación en el servidor.

La CI ejecuta la misma comprobación

CI significa integración continua: un servidor que ejecuta comprobaciones cada vez que alguien hace push. Escribes los pasos en un archivo guardado en el repositorio, así que cada clon tiene las mismas reglas.

En Gitea el archivo vive en .gitea/workflows. El servidor entrega cada trabajo a un ejecutor. El resultado se ve en la pull request, y quien revisa ve un fallo enseguida.

Ejemplo resuelto: un archivo de flujo

Línea del archivoQué dice
`name: check`el nombre que muestra la página
`on: [push]`ejecutarse en cada push
`runs-on: ubuntu-latest`el tipo de máquina que se usa
`- uses: actions/checkout@v4`traer primero los archivos del proyecto
`- run: grep -q Te precios.txt`la comprobación en sí, la misma prueba que el gancho

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

El Gitea del laboratorio no tiene ejecutor

Este archivo hace el trabajo del gancho. Cada paso se ejecuta en orden, y un paso que termina con un estado distinto de cero hace fallar el trabajo.

El Gitea del laboratorio acepta el archivo y anota una ejecución por cada push, pero se queda en espera. No hay ningún ejecutor conectado, así que nada la realiza. Un equipo real conecta uno.

Sobre este laboratorio y su código: Laboratorio de Git y Gitea: aprende clone, commit y push en un servidor Git propio

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.