geckos
https://github.com/typicode/husky tiene la capacidad de ejecutar git hooks automáticamente de manera que puedan compartirse entre equipos en el propio repositorio.
¿Cómo puede funcionar esto? Dado que los ganchos deben estar en .git/hooks
que no se agrega al repositorio.
¿Se envuelve? git
ordenar e interceptar comandos, ejecutar ganchos cuando suceden?
Quiero reproducir este comportamiento para proyectos python y php sin la necesidad de depender de npm o node.
éxito
A partir de la versión 5 husky
usa git core.hooksPath
git config core.hooksPath .husky
para ser exacto. esto se hace en husky install
paso.
Desde .husky
carpeta creada por husky install
contiene pre-commit
script, se ejecutará antes de la confirmación. Por defecto tendrá npm test
en él, pero puede editarlo a su gusto.
Puedes hacer algo similar en cualquier proyecto. Solo agrega .githooks
carpeta y enganche los archivos dentro de ella (consulte .git/hooks para ver los archivos de muestra). pero tienes que correr git config core.hooksPath .githooks
mientras clona el repositorio (o configura ganchos por primera vez). Puede tener algún script de inicio para hacer eso.
npm
tiene scripts.prepare
que puede ejecutar comandos en npm install
cual es husky install
en este caso.
Mientras la dependencia de husky está instalada (a través de npm install
, npm add husky
, yarn install
, …) los hooks de git se crean/actualizan en el directorio .git/hooks. Si el enlace se activa a través de un comando git, se activa un script de husky que ejecutará un comando basado en el administrador de paquetes que usó para la instalación. Si usa npm npx --no-install husky-run $hookName "$gitParams"
es ejecutado. Ese comando busca en su configuración y ejecuta el comando definido para el enlace allí.
Es como un proxy para ganchos de git. El proxy se instala una vez y se ejecuta cada vez mediante un git hook normal. Si se ejecuta busca en la configuración y ejecuta los comandos allí definidos.
-
Gracias por tu respuesta. Esto es algo interesante, la instalación de cosas ejecuta código arbitrario, lo cual es un riesgo potencial de seguridad. Pregunté porque traté de reproducir este comportamiento con puro git, pero es imposible. Por fin no puedo encontrar una manera de copiar los ganchos a .git/hooks en el clon, así que los puse en Léame y dejo que el usuario lo instale manualmente. gracias de nuevo
– geckos
14 mayo 2020 a las 17:40
-
@geckos: sí, existe un riesgo de seguridad definitivo. Pero, de nuevo: revisar y construir cualquier El software es un riesgo potencial para la seguridad porque casi todos los sistemas de compilación permiten ejecutar comandos externos arbitrarios (es decir, ejecución de código arbitrario). Por lo tanto, no debería crear software que no sea de confianza de todos modos.
– Joaquín Sauer
15 oct 2021 a las 13:07
¿Has mirado el código fuente? No soy un experto en javascript, pero me parece que husky instala los ganchos cuando lo instalas.
– Roland Smith
31 de julio de 2019 a las 20:18
Estaba intentando eso. En github.com/typicode/husky/blob/…
– geckos
31 de julio de 2019 a las 21:44
Parece copiar los ganchos en
createHook
en el enlace de arriba. Esto parece suceder ennpm install
tiempo en lugar degit clone
. Necesitaría algo como esto en un paquete pip o en un paquete composer si quiero que esto se ejecute en un proyecto python o php– geckos
31 de julio de 2019 a las 21:49