Git – Ganchos

Git es un sistema de control de versiones gratuito y de código abierto. Se utiliza en el desarrollo de software. Git permite a los desarrolladores de software ver los cambios que hicieron en el código, les da la posibilidad de deshacer cosas si es necesario y ayuda a un equipo de personas a trabajar juntas en un proyecto. Aquí discutiremos los ganchos de git.

Los ganchos de Git brindan una forma de activar scripts personalizados en diferentes eventos, como durante la confirmación, inserción o reorganización, etc. Hay dos tipos de ganchos presentes en Git.

  1. Ganchos del lado del cliente
  2. Ganchos del lado del servidor

Tipos de ganchos

Ganchos del lado del cliente Ganchos del lado del servidor
pre cometido pre-recibir
preparar-commit-msg actualizar
cometer-mensaje post-recepción
post-compromiso  
post-pago  
pre-rebase  

Nota: Hay muchos otros ganchos excepto este, pero estamos cubriendo estos principales. A continuación se muestra la representación del mismo:

Para usar git hooks, primero debemos seguir algunos pasos para habilitarlos, que son los siguientes:

Paso 1: Primero debemos cambiar nuestro directorio al siguiente directorio de la siguiente manera:

repository/.git/hooks 

A continuación se muestra una captura de pantalla de la ventana del terminal que muestra lo mismo de la siguiente manera:

Al principio, aquí estamos en el directorio ~/Desktop/GFG , que es un repositorio de git. Así que hemos usado el siguiente comando de directorio para ir al directorio específico. Este directorio contiene todos los ganchos de un repositorio.

cd .git/hooks

Paso 2: para usar un gancho primero, debemos habilitarlo y para habilitar un gancho, debemos eliminar la extensión .sample del final de los archivos. Para hacerlo, podemos usar el siguiente comando de la siguiente manera:

mv hookname.sample hookname 

A continuación se muestra una captura de pantalla de la ventana del terminal que muestra lo mismo de la siguiente manera: 

Aquí hemos eliminado la extensión .sample del gancho de confirmación previa y la hemos habilitado.

Paso 3: después de eso, debemos proporcionar el permiso de ejecución para el gancho. Para hacerlo podemos usar el siguiente comando de la siguiente manera:

chmod +x hookname

Ahora podemos escribir nuestros scripts en diferentes lenguajes como Python, Bash o Shell. Para escribir un script primero, debe especificarlo en la primera línea del script.

La primera línea del script será:

A. Python

#!/usr/bin/env python

B concha

#!/bin/sh

C. Bash

#!/bin/bash 

Nota: Usaremos secuencias de comandos de Python para este artículo.

Diferentes tipos de ganchos

A. Hooks del lado del cliente

1. confirmación previa: el enlace de confirmación previa se ejecuta en el evento de confirmación de git. Esto se puede usar para el análisis estático, Linting, correctores ortográficos y controles de estilo de código. Toma cero argumentos y salir con un estado distinto de cero aborta la operación de confirmación.

Consideremos el siguiente script simple para una demostración. Este script, cuando se ejecuta, imprimirá el mensaje «Esto es un git hook» en la consola en caso de que se cancele la confirmación. Como aquí, proporcionamos un código de salida 1 que es un estado de salida distinto de cero que le dijo a git que cancelara la operación de confirmación.

Ejemplo:

Python3

#!/bin/python
import sys
 
 
def main():
    print("This is a git hook")
    sys.exit(1)
 
 
if __name__ == "__main__":
    main()

Aquí está el resultado cuando se realiza cualquier operación de confirmación en el repositorio:

2. prepare-commit-msg: el gancho prepare-commit-msg se ejecuta antes de que se inicie el editor de mensajes de confirmación, pero después de que se cree el mensaje predeterminado. Es útil para editar el mensaje predeterminado antes de que el autor de la confirmación lo vea. También es útil para agregar Ticket-ID, Branch name, Style Checklist y Rules para confirmaciones. Toma tres parámetros que son los siguientes:

  • La ruta para contener el mensaje de confirmación hasta el momento
  • El tipo de compromiso
  • confirmar información SHA-1 

3. commit-msg: Esto es útil para validar una confirmación. Los desarrolladores pueden proporcionar reglas para validar el estado de confirmación o el mensaje de confirmación utilizando este enlace. Al igual que es útil para la revisión ortográfica de los mensajes de confirmación. Este enlace toma un parámetro y es la ruta a un archivo temporal que contiene el mensaje de confirmación. Tomemos un pequeño fragmento de código para esto que se encuentra a continuación de la siguiente manera:

Ejemplo:

Python3

#!/bin/python
import sys
def main():
        with open(sys.argv[1],'a+') as fp:
            # fp.read() can be used to read the commit msg
            fp.writelines(" and issue id is #1") #appending with issue id
            sys.exit(0) # indicates success
 
if __name__=="__main__":
    main()

Aquí, durante la operación de confirmación, el mensaje de confirmación se adjunta con la identificación del problema.

4. post-confirmación: este enlace se ejecuta después de que la operación de confirmación se complete con éxito. Este enlace puede ser útil para proporcionar notificaciones y no requiere ningún parámetro. Aquí hay un pequeño fragmento de código que da un reconocimiento después de confirmar.

Ejemplo:

Python3

#!/bin/python
import sys
def main():
    print("Satyajit Ghosh successfully committed the changes in the repo")
    sys.exit(0) # indicates success
 
if __name__=="__main__":
    main()

5. post-pago: el enlace posterior al pago se ejecuta después de la operación de pago de git. Se puede usar para configurar un directorio de trabajo, documentación de generación automática, etc. Funciona de manera similar al enlace posterior a la confirmación. Este gancho acepta tres parámetros de la siguiente manera:

  • El ref del anterior HEAD
  • El ref del nuevo HEAD
  • Una bandera que indica extracción de sucursal (1) o extracción de archivo (0).

6. pre-rebase: el enlace de pre-rebase se ejecuta antes de la operación de rebase. Se puede usar un script para validar que la reorganización coincida con el flujo de trabajo o no. De lo contrario, un código de salida distinto de cero del script detendrá el proceso de reorganización.

B. Hooks del lado del servidor

1. pre-receive: este gancho reacciona a git push y actualiza las referencias en su repositorio. No necesita argumentos, pero para cada referencia que se actualiza, recibe una entrada estándar en este formato.

<old-value> SP <new-value> SP <ref-name> LF>

donde <valor-antiguo> es el nombre del objeto antiguo almacenado en la referencia, <valor-nuevo> es el nombre del objeto nuevo que se almacenará en la referencia y <nombre-ref> es el nombre completo de la referencia. Si el gancho sale con un estado distinto de cero, ninguna de las referencias se actualizará.

2. actualización: antes de actualizar la referencia en el repositorio remoto, se invoca el gancho de actualización. Su estado de salida determina el éxito o el fracaso de la actualización de referencia. Toma tres argumentos de la siguiente manera: 

  • el nombre de la referencia que se actualiza
  • el antiguo nombre del objeto se almacena en la referencia
  • y el nuevo nombre del objeto que se almacenará en la ref.

3. post-receive: Se ejecuta en el repositorio remoto una vez que se han actualizado todas las referencias. No acepta argumentos, pero obtiene la misma información que el gancho de pre-recepción en su entrada estándar.

Publicación traducida automáticamente

Artículo escrito por satyajit1910 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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