FeaturedNOTICIAS

Cómo usar los ganchos de Git para la automatización de confirmaciones – CloudSavvy IT


Logotipo de Git

Los ganchos de Git son scripts bash que se ejecutan antes o después de los comandos de Git, como commit y push. Le permiten automatizar acciones repetitivas en su repositorio, así como aplicar filtros y controles a su flujo de trabajo de Git.

¿Qué son los Git Hooks?

Los ganchos de Git son en realidad scripts bash con un nombre especial, en el .git/hooks/ carpeta. Git invocará automáticamente estas funciones cuando realice determinadas tareas, lo que le permitirá «conectarse» al flujo de trabajo de Git para modificarlo con su propio código.

Los repositorios de Git se inicializan con algunos ejemplos; todo lo que tiene que hacer para aplicarlos es descomentar la extensión. Esto significa que solo podrá tener una secuencia de comandos por gancho, por lo que si desea hacer varias cosas, deberá combinarlas o delegarlas a otras secuencias de comandos.

Entonces, ¿para qué puedes usarlos? Bueno, cualquier actividad que pueda hacer un script bash funcionará. Dos casos de uso comunes son las pruebas automatizadas y la aplicación de controles / filtros de confirmación de salida.

Las pruebas son una parte importante de cualquier flujo de trabajo. Si bien los ganchos de Git no sustituyen de ninguna manera a la canalización de integración continua / distribución continua (CI / CD), que se probará antes de la revisión y distribución, ejecutarlos localmente lo ayudará a detectar errores antes de que se apaguen.

Asimismo, comprobar el contenido de las confirmaciones para evitar que se envíe código no deseado puede ser muy útil, aunque esto requiere que seas lo suficientemente inteligente como para detectar el problema antes de que se convierta en un problema. Si utiliza con frecuencia código de depuración que nunca debería confirmarse, puede probarlo y evitarlo.

Hay muchos ganchos de Git para elegir, sobre los que puede leer en la documentación de Git, pero los útiles son:

  • pre-compromiso, post-compromiso
  • pre-empuje
  • después de la salida
  • commit-msg

Cada gancho tomará argumentos para el script, al que puede acceder con $1, $2etc.

Compartiendo Git Hooks

Los ganchos de Git son solo para el repositorio local y no se envían al control remoto. Puede configurar cualquier gancho de Git que desee sin afectar a sus colegas, por lo que podría, por ejemplo, iniciar un entorno de prueba local que dependa de la configuración de su PC, en cada confirmación, sin ningún problema.

Si realmente desea compartir ganchos de Git con su equipo, puede crear una nueva carpeta para ellos que se rastreará en Git, como .githooksy establezca el valor de configuración para core.hooksPath:

git config core.hooksPath .githooks

Sin embargo, al igual que los ganchos predeterminados, esta configuración es por repositorio, por lo que su equipo también deberá establecer este valor de configuración.

Cómo usar los ganchos de Git

Como la mayoría de las técnicas de automatización, la forma de utilizar los enlaces de Git depende en gran medida de usted y del flujo de trabajo de su repositorio, pero existen algunos casos de uso comunes.

Si desea verificar el contenido de las confirmaciones, puede usar git diff para ver la diferencia línea por línea, luego grep para buscar coincidencias. En este caso, bloquea todo uso de la función Debug.Log salir con un código distinto de cero:

if test $(git diff --cached | grep -E "Debug.Log(" | wc -l) != 0 then
    exit 1
fi

O puede probar el mensaje de confirmación real. La muestra de pre-push usa una prueba similar, pero greps la salida de git rev-list En lugar de. Esto comprueba las confirmaciones marcadas como trabajo en curso (WIP) y se niega a enviarlas.

Otro caso de uso común es la ejecución automática de pruebas. Depende de usted si desea que esté presente en cada confirmación o justo antes de que los cambios se envíen al control remoto.

De cualquier manera, es tan simple como ejecutar el comando de prueba, obtener el estado de salida del último comando y lanzar un error si falla. Este ejemplo prueba para una aplicación .NET:

#!/bin/sh
exec dotnet test "./UnitTests/UnitTests.csproj" --filter "Category!=Integration"

if [ $? -ne 0 ]; then
    echo "Tests must pass before commit!"
    exit 1
fi

Hay algunas herramientas para ayudar con esto; Husky ejecutará fácilmente las pruebas de NodeJS con una configuración en package.json, que también se aplicará a todos sus compañeros de equipo.

{
 "husky": {
  "hooks": {
   "pre-commit": "npm test",
   "pre-push": "npm test",
   "...": "..."
  }
 }
}

Sin embargo, esto no sustituye a la realización de pruebas reales en el repositorio autorizado. Hay escenarios en los que las pruebas locales pueden pasar, pero las pruebas remotas fallarían, especialmente en los casos en los que no se preparan todos los cambios para enviar.

TE INTERESA>>  Facebook viral: el fotógrafo captura instantáneo en que dos osos bebés se toman de las patas para Seguir a su mamá

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba