Saltar al contenido
GitTree
Cambios y commits

Utilice enlaces de Git para comprobar su trabajo antes de que salga de su computadora

Un gancho de Git es un script que Git ejecuta por sí solo en un momento fijo, como justo antes de una confirmación o un envío. En Preferences › Hooks, GitTree muestra qué se ejecuta y cuándo, le permite agregar ganchos de plantillas ya preparadas, editarlos y probarlos, activarlos y desactivarlos y compartirlos con su equipo a través del repositorio.

GratisActualizado

Funciona en GitTree Gratis: todas las funciones locales de Git, sin necesidad de cuenta.

En esta página
  1. Antes de empezar
  2. donde encontrarlo
  3. Pasos
  4. Resultado esperado
  5. Qué son los ganchos y por qué usarlos
  6. Los ganchos que más usarás
  7. Plantillas listas para usar
  8. Qué hace una ejecución de prueba
  9. Comparte ganchos con tu equipo
  10. Saltar ganchos para una confirmación
  11. Si algo sale mal
  12. Preguntas
  13. Relacionado

Antes de empezar

  • Hay un repositorio abierto: los ganchos pertenecen a un repositorio.
  • El repositorio es de confianza. En modo restringido, Git no ejecuta ninguno de sus ganchos; aún puedes leerlos y editarlos (confianza del repositorio).
  • Los ganchos son scripts de shell. Las plantillas utilizan sh simple, que proporcionan macOS, Windows (hasta Git for Windows) y Linux.

donde encontrarlo

  • El cuadro de confirmación: debajo del botón de confirmación, May run: … enumera los enlaces que ejecuta una confirmación. Manage Hooks abre la página.
  • Tools en la barra de herramientas, o la sección TOOLS del panel izquierdo: Git hooks.
  • El menú de la pestaña del repositorio o la paleta de comandos: Manage Git Hooks… o Alt+Shift+H.
  • Preferences (Mod+,) › Hooks. La búsqueda en Preferencias de “ganchos”, “pre-commit” o “husky” también lo encuentra.
acciónmacOSWindows y Linux
Administrar ganchos de Git⌥⇧HAlt+Shift+H
Abrir preferencias⌘,Ctrl+,

Pasos

  1. Abra la página de ganchos

    Utilice Manage Hooks debajo del botón de confirmación o Alt+Shift+H. Con varios repositorios abiertos, elija uno en Repository. La página comienza con qué son los ganchos, una guía How it works de tres pasos y un enlace a este artículo.

  2. Lea lo que se ejecuta cuando

    What runs when muestra el flujo de confirmación (pre-commit, prepare-commit-msg, commit-msg, post-commit) y el flujo de inserción (pre-push). Cada paso dice Runs, Off, Not executable o No hook, y si Can stop the action o solo informa.

    Ganchos de Preferencias para lumen, con Qué se ejecuta, cuándo y el gancho commit-msg marcado como no ejecutable
    La página nombra los enlaces que Git puede ejecutar al confirmar y al enviar, y ofrece Compartir a través de .githooks.GitTree interfaz con un repositorio de demostración.
  3. Añadir un gancho

    Presione Add Hook…. Debajo de When it runs, elige el anzuelo; en Start from, elija una plantilla, Git’s sample o Empty script. La vista previa de Script muestra exactamente lo que se escribirá. Create Hook escribe el archivo, listo para ejecutarse, y lo abre en el editor.

  4. Editar el guión

    Edit abre el script con números de línea. Cámbielo y presione Save (o Mod+S). Si el archivo cambió en el disco desde que lo abrió, GitTree se niega a sobrescribirlo y conserva su texto, para que pueda volver a abrirlo y compararlo.

  5. Pruébelo

    Test Run ejecuta el enlace ahora, como lo haría Git, sin realizar una confirmación ni un impulso. Para commit-msg y prepare-commit-msg, escriba un mensaje para verificar. La salida fluye y el resultado dice lo que haría Git: Passed with exit code 0: Git would continue. o Failed with exit code 1: Git would stop here. Stop finaliza una ejecución larga.

  6. Apaga un gancho o compártelo

    El interruptor al lado de un gancho lo apaga cambiándole el nombre a <name>.disabled y lo vuelve a encender; no se borra nada. Share Through .githooks coloca los ganchos en el repositorio de su equipo (ver más abajo).

Resultado esperado

Desde la siguiente confirmación o envío, Git ejecuta los enlaces marcados Runs. La línea May run: … del cuadro de confirmación los nombra, y la salida de un gancho aparece debajo de Hook output cuando imprime algo o detiene la confirmación.

Qué son los ganchos y por qué usarlos

Git busca archivos ejecutables con nombres fijos en la carpeta de ganchos (.git/hooks a menos que core.hooksPath indique lo contrario) y los ejecuta en los momentos coincidentes. Un gancho que se ejecuta antes de una acción, como pre-commit o pre-push, puede detenerla saliendo con un estado distinto de cero. Un gancho que se ejecuta después de él, como post-commit o post-merge, solo puede informar.

  • Detecte los errores antes de que abandonen su computadora: pruebas fallidas, errores de pelusa, marcadores de conflicto sobrantes y archivos de gran tamaño.
  • Mantenga los mensajes de confirmación coherentes, por ejemplo Conventional Commits o una clave de problema en cada mensaje.
  • Obtenga comentarios en segundos, en lugar de esperar a que falle una ejecución de CI.
  • Realice las mismas comprobaciones para todo el equipo manteniendo los ganchos en el repositorio.

Los ganchos que más usarás

Ganchos comunes del lado del cliente
GanchoCuando Git lo ejecutaUso típico
pre-commitAntes de que se cree el commitPelusa y pruebas rápidas sobre lo que se prepara; bloquear confirmaciones en principal
prepare-commit-msgAntes de escribir el mensajeColoque la clave del problema del nombre de la rama en el mensaje.
commit-msgDespués de escribir el mensajeVerifique el formato del mensaje, como Conventional Commits
post-commitDespués de crear la confirmaciónNotificar o iniciar sesión; no se puede deshacer el commit
pre-pushAntes de enviar algo al remotoEjecute el conjunto de pruebas completo; rechazar pushes a ramas protegidas
post-mergeDespués de una fusión o extracciónDecir cuando un archivo de bloqueo cambió, para que las dependencias se reinstalen
post-checkoutDespués de cambiar de ramaLimpiar la salida de la compilación o actualizar los archivos generados

Los enlaces de servidor como pre-receive y update se ejecutan solo en un servidor que recibe envíos. GitTree los enumera cuando están presentes pero nunca los prueba.

Plantillas listas para usar

Plantillas en Agregar gancho
PlantillaGanchoque hace
Proteger las ramas principalespre-commitDetiene las confirmaciones realizadas directamente en main o master
Captura marcadores de conflicto y espacios en blancopre-commitDetiene una confirmación que agrega marcadores de conflicto sobrantes o espacios en blanco finales (git diff --cached --check)
Bloquear archivos grandespre-commitDetiene una confirmación que agrega un archivo de más de 5 MB
Agregar la clave del problemaprepare-commit-msgComienza cada mensaje con la clave del problema en el nombre de la rama, como ABC-123
Conventional Commitscommit-msgRequiere resúmenes como feat(parser): accept empty lines
Ejecute pruebas antes de enviarpre-pushEjecuta npm test, cargo test, go test, pytest o make test y detiene el envío cuando fallan.
Proteger ramas remotaspre-pushDetiene y envía directamente a principal o maestro en el remoto
Recordatorio de dependenciapost-mergeDice cuando un archivo de bloqueo cambió después de una extracción o fusión

Cada plantilla es un script normal con su configuración en la parte superior, como PROTECTED="main master" o TEST_COMMAND="". Cámbielos en el editor para que se ajusten a su proyecto.

Qué hace una ejecución de prueba

GitTree ejecuta el enlace a través de git hook run, por lo que Git lo encuentra y lo inicia exactamente como lo haría durante la acción real, incluido core.hooksPath. El gancho recibe información inventada:

  • pre-commit, pre-merge-commit, post-commit y pre-auto-gc: sin argumentos.
  • commit-msg y prepare-commit-msg: un archivo temporal con el mensaje que escribiste, que se elimina posteriormente.
  • pre-push: el nombre y la URL de tu remoto push, sin ramas en su entrada.
  • post-merge: 0, como después de una fusión normal.

Comparte ganchos con tu equipo

Los ganchos en .git/hooks nunca se confirman, por lo que cada clon tiene el suyo propio. Share Through .githooks los copia en una carpeta .githooks en el repositorio y configura core.hooksPath en la configuración de este repositorio. Confirme la carpeta; Luego, cada compañero de equipo ejecuta esto una vez después de la clonación:

git config core.hooksPath .githooks

Use This Clone’s Own Hooks elimina esa configuración nuevamente. La carpeta .githooks y tus enlaces en .git/hooks permanecen donde están.

Saltar ganchos para una confirmación

Abra Commit Options en el cuadro de confirmación y active Skip Hooks (--no-verify). Luego, Git omite pre-commit y commit-msg para esa confirmación; prepare-commit-msg y post-commit aún se ejecutan, y la línea debajo del botón de confirmación lo dice. Para detener un gancho por más tiempo, apáguelo en la página Ganchos.

Si algo sale mal

Un gancho muestra Not executable y nunca se ejecuta.

En macOS y Linux, Git omite un archivo de enlace sin el permiso de ejecución. Presione Make Executable; GitTree lo agrega solo donde el archivo es legible.

"El gancho cambió en el disco desde que se abrió; vuelva a abrirlo para ver el nuevo contenido".

Otro programa o un administrador de enlaces reescribió el archivo. Cierra el editor, ábrelo nuevamente y aplica el cambio al nuevo contenido.

"Este enlace es un enlace. GitTree nunca escribe a través de un enlace; edita el archivo al que apunta".

El gancho es un enlace simbólico, a menudo creado por un administrador de ganchos. Edite el archivo al que apunta o la configuración de esa herramienta.

El script funciona en macOS pero falla en Linux con "intérprete incorrecto" o errores \ .

El archivo tiene Windows finales de línea (CRLF). El editor advierte sobre ellos; guarde el script con finales de línea LF.

Test Run está atenuado.

Su razón está al lado del botón: confiar en el repositorio, activar el enlace, hacerlo ejecutable o tener en cuenta que este enlace solo recibe información durante la operación real de Git.

Preguntas

¿Los ganchos forman parte del plan gratuito?

Sí. Administrar, editar, ejecutar pruebas y compartir enlaces es Git local y no necesita una cuenta de alojamiento.

¿GitTree elimina un gancho cuando lo desactivo?

No. Al apagarlo se cambia el nombre del archivo a <name>.disabled; al encenderlo se le cambia el nombre. GitTree nunca elimina un gancho.

¿Se confirmará un gancho que cree?

No mientras esté en .git/hooks. Utilice Share Through .githooks para mantener los enlaces en el repositorio, donde se confirman como cualquier otro archivo.

¿Se puede escribir un gancho en Node.js o Python?

Sí. Git ejecuta el archivo con el programa en su primera línea, como #!/usr/bin/env node; el editor muestra ese programa como Runs with node. El programa debe instalarse en cada computadora que ejecute el gancho.