Una descripción general de los ganchos de Git










  • Los ganchos de Git son scripts que se ejecutan automáticamente cada vez que ocurre un evento en particular en un repositorio de Git . Un gancho de Git le permite personalizar el comportamiento interno de Git y también activan acciones personalizables en puntos clave del ciclo de vida de desarrollo de su proyecto.

    Los ganchos Git tienen varios usos comunes que incluyen:

    • Fomentar una política de compromiso.
    • Alterar el entorno de un proyecto, dependiendo del estado del repositorio.
    • Implementación de flujos de trabajo de integración continua.

    Dado que los ganchos de Git son muy personalizables, puede usarlos para automatizar u optimizar prácticamente cualquier aspecto de su flujo de trabajo de desarrollo.

    En este artículo, le daré una descripción general rápida de los ganchos de Git y cómo funcionan. Luego, le mostraré algunos ganchos de Git comunes y las definiciones de lo que hacen.

    Descripción general del gancho de Git

    Al igual que muchos otros sistemas de control de versiones, Git proporciona una forma de activar scripts personalizados cuando se producen ciertas acciones importantes en el repositorio. A su vez, esto los hace fáciles de instalar y configurar.

    Hay dos grupos de ganchos, del lado del cliente y del lado del servidor. Los enlaces del lado del cliente se activan mediante operaciones como la confirmación y la fusión , mientras que los enlaces del lado del servidor se ejecutan en operaciones de red, como la recepción de confirmaciones enviadas.

    Instalación de ganchos de Git

    Los ganchos residen en el directorio .git/hooks de cada repositorio de Git . Git llena automáticamente este directorio con scripts de ejemplo cuando inicializa un repositorio. Si echas un vistazo dentro de .git/hooks , encontrarás los siguientes archivos:

    [ht_message mstyle=”info” title=”” show_icon=”” id=”” class=”” style=”” ]applypatch-msg.sample pre-push.sample

    commit-msg.sample pre-rebase.sample


    post- update.sample prepare-commit-msg.sample


    pre-applypatch.sample update.sample


    pre-commit.sample[/ht_message]

    Estos representan la mayoría de los ganchos disponibles, pero la extensión .sample evita que se ejecuten de forma predeterminada. Para “instalar” un gancho, todo lo que tiene que hacer es eliminar la extensión .sample . O, si está escribiendo un nuevo script desde cero, simplemente puede agregar un nuevo archivo que coincida con uno de los nombres de archivo anteriores, menos la extensión .sample .

    Pruebe el siguiente ejemplo y vea cómo lo hace. Instale un enlace simple de preparación-commit-msg . Elimine la extensión .sample de este script y agregue lo siguiente al archivo:

    [ht_message mstyle=”info” title=”” show_icon=”” id=”” class=”” style=”” ]#!/bin/sh

    echo “# ¡Incluya un mensaje de confirmación útil!”
    > $1[/ht_mensaje]

    Los ganchos deben ser ejecutables, por lo que es posible que deba cambiar los permisos de archivo del script si está creando desde cero. Por ejemplo, para asegurarse de que prepare-commit-msg sea ejecutable, ejecutaría el siguiente comando:

    [ht_message mstyle=”info” title=”” show_icon=”” id=”” class=”” style=”” ]chmod +x preparar-commit-msg[/ht_message]

    Los scripts de ejemplo integrados anteriores son referencias muy útiles, ya que documentan los parámetros que se pasan a cada enlace (varían de un enlace a otro).

    Ganchos del lado del cliente

    Echemos un vistazo a los ganchos Git del lado del cliente y veamos qué hace cada uno.

    Enlaces de flujo de trabajo de confirmación

    pre-commit : este gancho de Git se usa para inspeccionar la instantánea que está a punto de confirmarse, para ver si olvidó algo, para asegurarse de que se ejecuten las pruebas o para examinar lo que necesite inspeccionar en el código.

    prepare-commit-msg : este enlace de Git se ejecuta antes de que se inicie el editor de mensajes de confirmación, pero después de que se cree el mensaje predeterminado. Te permite editar el mensaje predeterminado antes de que el autor de la confirmación lo vea. Este enlace toma algunos parámetros: la ruta al archivo que contiene el mensaje de confirmación hasta el momento, el tipo de confirmación y la confirmación SHA-1 si se trata de una confirmación modificada.

    commit-msg : este gancho de Git toma un parámetro, que nuevamente es la ruta a un archivo temporal que contiene el mensaje de confirmación escrito por el desarrollador. Si este script sale distinto de cero, Git cancela el proceso de confirmación, por lo que puede usarlo para validar el estado de su proyecto o el mensaje de confirmación antes de permitir que se realice una confirmación.

    post-commit : este gancho de Git se ejecuta después de que se completa todo el proceso de confirmación. No requiere ningún parámetro, pero puede obtener fácilmente la última confirmación ejecutando git log -1 HEAD . Generalmente, este script se usa para notificaciones o algo similar.

    Ganchos de flujo de trabajo de correo electrónico

     applypatch-msg : este gancho de Git toma un único argumento: el nombre del archivo temporal que contiene el mensaje de confirmación propuesto. Git aborta el parche si este script sale distinto de cero. Puede usar esto para asegurarse de que un mensaje de confirmación tenga el formato correcto o para normalizar el mensaje haciendo que el script lo edite en su lugar.

    pre-applypatch : este gancho de Git es un poco confuso porque se ejecuta después de aplicar el parche pero antes de realizar una confirmación, por lo que puede usarlo para inspeccionar la instantánea antes de realizar la confirmación.

    post-applypatch : este gancho de Git se ejecuta después de realizar la confirmación. Puede usarlo para notificar a un grupo o al autor del parche que sacó que lo ha hecho. No puede detener el proceso de aplicación de parches con este script.

    Otros ganchos de clientes

    pre-rebase : este gancho de Git se ejecuta antes de que rebase cualquier cosa y puede detener el proceso saliendo de cero. Puede usar este gancho para no permitir el rebase de cualquier confirmación que ya se haya enviado.

    post-rewrite : se ejecuta mediante comandos que reemplazan las confirmaciones, como git commit –amend y git rebase (aunque no por git filter-branch ). Su único argumento es qué comando activó la reescritura y recibe una lista de reescrituras en stdin. Este gancho tiene muchos de los mismos usos que los ganchos posteriores al pago y posteriores a la fusión .

    post-merge : este gancho de Git se ejecuta después de un comando de combinación exitoso. Puede usarlo para restaurar datos en el árbol de trabajo que Git no puede rastrear, como datos de permisos. Este enlace también puede validar la presencia de archivos externos al control de Git que puede querer copiar cuando cambie el árbol de trabajo.

    pre-push : este gancho Git se ejecuta durante git push. Se ejecuta después de que se hayan actualizado las referencias remotas, pero antes de que se hayan transferido los objetos. Recibe el nombre y la ubicación del control remoto como parámetros y una lista de referencias a actualizar a través de stdin. Puede usarlo para validar un conjunto de actualizaciones de referencia antes de que se produzca una inserción (un código de salida distinto de cero anulará la inserción).

    Ganchos del lado del servidor

    pre-receive : este gancho de Git es el primer script que se ejecuta cuando el manejo de una inserción de un cliente es pre-receive . Toma una lista de referencias que se envían desde stdin; si sale distinto de cero, no se acepta ninguno de ellos. Puede usar este enlace para hacer cosas como asegurarse de que ninguna de las referencias actualizadas no sea de avance rápido. Úselo también para controlar el acceso de todas las referencias y archivos que están modificando con el empuje.

    actualización : este enlace de Git es muy similar a la secuencia de comandos previa a la recepción , excepto que se ejecuta una vez para cada rama que el empujador intenta actualizar. Si el empujador está tratando de empujar a varias ramas, la recepción previa se ejecuta solo una vez, mientras que la actualización se ejecuta una vez por rama a la que están empujando. En lugar de leer desde la entrada estándar, este script toma tres argumentos: el nombre de la referencia (rama), el SHA-1 al que apuntaba la referencia antes de la inserción y el SHA-1 que el usuario está tratando de insertar. Si el script de actualización sale distinto de cero, solo se rechaza esa referencia; otras referencias aún se pueden actualizar.

    post-receive : este gancho Git se ejecuta después de que se completa todo el proceso y se puede usar para actualizar otros servicios o notificar a los usuarios. Toma los mismos datos estándar que el gancho de pre-recepción. Ejemplos incluyen:

    • Enviar una lista por correo electrónico
    • Notificación a un servidor de integración continua
    • Actualización de un sistema de seguimiento de tickets

    Incluso puede analizar los mensajes de confirmación para ver si es necesario abrir, modificar o cerrar algún ticket. Este script no puede detener el proceso de inserción, pero el cliente no se desconecta hasta que se completa. Tenga cuidado si intenta hacer algo que pueda llevar mucho tiempo.

    Administrar ganchos de Git

    Aquí hay algunas opciones fantásticas para administrar sus ganchos de Git. Eche un vistazo y vea si son de su interés.

    Impresionantes Ganchos Git

    Impresionantes ganchos de git

    Awesome Git Hooks es una biblioteca de colección de excelentes Git Hooks para tener a mano.

    Ganchos Git

    Ganchos Git

    Git Hooks es un administrador completo de git hooks a tu disposición.

    sobreasignar

    sobreasignar

    Overcommit es un administrador de ganchos de Git muy bien mantenido, actualizado y flexible.

    Resumen de ganchos de Git

    Ahora sabemos que los ganchos de Git se pueden usar para alterar el comportamiento interno y recibir notificaciones cuando ocurren ciertos eventos en un repositorio. Los ganchos de Git son secuencias de comandos normales que residen en . repositorio git/hooks , y son bastante fáciles de instalar y personalizar si está familiarizado con Git.

    Este artículo también le proporcionó los ganchos del lado del cliente y del lado del servidor disponibles y una definición de lo que hacen.