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.
Funciona en GitTree Gratis: todas las funciones locales de Git, sin necesidad de cuenta.
En esta página
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
shsimple, 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ón | macOS | Windows y Linux |
|---|---|---|
| Administrar ganchos de Git | ⌥⇧H | Alt+Shift+H |
| Abrir preferencias | ⌘, | Ctrl+, |
Pasos
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.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.

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. 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.
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.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.
Apaga un gancho o compártelo
El interruptor al lado de un gancho lo apaga cambiándole el nombre a
<name>.disabledy 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
| Gancho | Cuando Git lo ejecuta | Uso típico |
|---|---|---|
| pre-commit | Antes de que se cree el commit | Pelusa y pruebas rápidas sobre lo que se prepara; bloquear confirmaciones en principal |
| prepare-commit-msg | Antes de escribir el mensaje | Coloque la clave del problema del nombre de la rama en el mensaje. |
| commit-msg | Después de escribir el mensaje | Verifique el formato del mensaje, como Conventional Commits |
| post-commit | Después de crear la confirmación | Notificar o iniciar sesión; no se puede deshacer el commit |
| pre-push | Antes de enviar algo al remoto | Ejecute el conjunto de pruebas completo; rechazar pushes a ramas protegidas |
| post-merge | Después de una fusión o extracción | Decir cuando un archivo de bloqueo cambió, para que las dependencias se reinstalen |
| post-checkout | Después de cambiar de rama | Limpiar 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
| Plantilla | Gancho | que hace |
|---|---|---|
| Proteger las ramas principales | pre-commit | Detiene las confirmaciones realizadas directamente en main o master |
| Captura marcadores de conflicto y espacios en blanco | pre-commit | Detiene una confirmación que agrega marcadores de conflicto sobrantes o espacios en blanco finales (git diff --cached --check) |
| Bloquear archivos grandes | pre-commit | Detiene una confirmación que agrega un archivo de más de 5 MB |
| Agregar la clave del problema | prepare-commit-msg | Comienza cada mensaje con la clave del problema en el nombre de la rama, como ABC-123 |
| Conventional Commits | commit-msg | Requiere resúmenes como feat(parser): accept empty lines |
| Ejecute pruebas antes de enviar | pre-push | Ejecuta npm test, cargo test, go test, pytest o make test y detiene el envío cuando fallan. |
| Proteger ramas remotas | pre-push | Detiene y envía directamente a principal o maestro en el remoto |
| Recordatorio de dependencia | post-merge | Dice 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 .githooksUse 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.