Nos gustaría crear algunos scripts de gancho básicos que todos podamos compartir, para cosas como formatear previamente los mensajes de confirmación. Git tiene scripts de enlace para eso que normalmente se almacenan en <project>/.git/hooks/
. Sin embargo, esos scripts no se propagan cuando las personas hacen un clon y no se controlan las versiones.
¿Hay una buena manera de ayudar a todos a obtener los guiones de gancho correctos? ¿Puedo hacer que esas secuencias de comandos de enlace apunten a secuencias de comandos controladas por versión en mi repositorio?
pre-commit
hace esto fácil para ganchos de precompromiso No responde la pregunta del OP sobre la gestión de ningún gancho de git arbitrario, pero los ganchos de precompromiso son probablemente los más utilizados con fines de calidad de código.Respuestas:
Teóricamente, podría crear un
hooks
directorio (o el nombre que prefiera) en el directorio de su proyecto con todos los scripts y luego vincularlos.git/hooks
. Por supuesto, cada persona que clonó el repositorio tendría que configurar estos enlaces simbólicos (aunque podría ser realmente elegante y tener un script de implementación que el clonador podría ejecutar para configurarlos de forma semiautomática).Para hacer el enlace simbólico en * nix, todo lo que necesita hacer es:
usar
ln -sf
si estás listo para sobrescribir lo que hay en.git/hooks
fuente
core.hooksPath
configurar un archivo fuera de .git para vincular a la carpeta de ganchos.En Git 2.9 , la opción de configuración
core.hooksPath
especifica un directorio de ganchos personalizado.Mueva sus ganchos a un
hooks
directorio rastreado en su repositorio. Luego, configure cada instancia del repositorio para usar el seguimiento enhooks
lugar de$GIT_DIR/hooks
:En general, la ruta puede ser absoluta o relativa al directorio donde se ejecutan los ganchos (generalmente la raíz del árbol de trabajo; consulte la sección DESCRIPCIÓN de
man githooks
).fuente
Si su proyecto es un proyecto de JavaScript y lo usa
npm
como administrador de paquetes, puede usar shared-git-hooks para aplicar githooksnpm install
.fuente
.git/hooks
.Para los usuarios de Nodejs , una solución simple es actualizar package.json con
La preinstalación se ejecutará antes
y redirige git para buscar ganchos dentro del directorio. \ hooks (o el nombre que elija). Este directorio debe imitar . \. Git \ hooks en términos de nombre de archivo (menos el .sample) y la estructura.
Imagine Maven y otras herramientas de compilación tendrán un equivalente a preinstalar .
También debería funcionar en todas las plataformas.
Si necesita más información, consulte https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
fuente
¿Qué hay de git-hooks , enruta
.git/hooks
invocar al script en el directorio del proyecto?githooks
.También hay muchas características para permitirle minimizar el enlace de copia y enlace simbólico en todo el lugar.
fuente
La mayoría de los lenguajes de programación modernos, o más bien sus herramientas de compilación, admiten complementos para administrar git hooks. Eso significa que todo lo que necesita hacer es configurar su package.json, pom.xml, etc., y cualquier miembro de su equipo no tendrá más opción que cumplir a menos que cambien el archivo de compilación. El complemento agregará contenido al directorio .git por usted.
Ejemplos:
https://github.com/rudikershaw/git-build-hook
https://github.com/olukyrich/githook-maven-plugin
https://www.npmjs.com/package/git-hooks
fuente
Estamos utilizando soluciones de Visual Studio (y, por lo tanto, proyectos) que tienen eventos previos y posteriores a la compilación. Estoy agregando un proyecto adicional llamado 'GitHookDeployer'. El proyecto modifica un archivo en el evento posterior a la compilación. Ese archivo está configurado para copiar en el directorio de compilación. Por lo tanto, el proyecto se construye cada vez y nunca se omite. En el evento de construcción, también se asegura de que todos los ganchos git estén en su lugar.
Tenga en cuenta que esta no es una solución general, ya que algunos proyectos, por supuesto, no tienen nada que construir.
fuente
Puede usar una solución administrada para la administración de enlace de precompromiso como precompromiso . O una solución centralizada para git-hooks del lado del servidor como Datree.io . Tiene políticas integradas como:
No reemplazará todos sus ganchos, pero podría ayudar a sus desarrolladores con los más obvios sin la configuración infernal de instalar los ganchos en cada computadora / repositorio de desarrolladores.
Descargo de responsabilidad: soy uno de los fundadores de Datrees
fuente
Puede hacer que su carpeta de ganchos sea otro repositorio de git y vincularla como un submódulo ... Supongo que vale la pena solo si tiene muchos miembros y ganchos cambiados regularmente.
fuente
Idealmente, los ganchos se escriben en bash, si sigue los archivos de muestra. Pero puede escribirlo en cualquier idioma disponible, y solo asegúrese de que tenga la bandera ejecutable.
Por lo tanto, puede escribir un código Python o Go para lograr sus objetivos y colocarlo debajo de la carpeta de ganchos. Funcionará, pero no se administrará junto con el repositorio.
Dos opciones
a) Scripts múltiples
Puede codificar sus ganchos dentro de su ayuda y agregar un pequeño fragmento de código a los ganchos, para llamar a su script perfecto, así:
b) Script único
Una opción más genial es agregar solo un script para gobernarlos a todos, en lugar de varios. Entonces, creas un gancho / mysuperhook.go y apuntas cada gancho que quieras tener.
El parámetro proporcionará a su script qué gancho se activó, y puede diferenciarlo dentro de su código. ¿Por qué? A veces es posible que desee ejecutar la misma verificación para confirmar y empujar, por ejemplo.
¿Y entonces?
Entonces, es posible que desee tener más funcionalidades, como:
¿Puede ser esto más simple?
Sí, hay varias herramientas para ayudarlo a administrar git-hooks. Cada uno de ellos está diseñado para abordar el problema desde una perspectiva diferente, y es posible que deba comprenderlos todos para obtener el que sea mejor para usted o su equipo. GitHooks.com ofrece muchas lecturas sobre el enganche y varias herramientas disponibles en la actualidad.
A partir de hoy, hay 21 proyectos enumerados allí con diferentes estrategias para administrar git hooks. Algunos solo lo hacen para un solo gancho, algunos para un idioma específico, etc.
Una de esas herramientas, escrita por mí y ofrecida de forma gratuita como un proyecto de código abierto, se llama hooks4git . Está escrito en Python (porque me gusta), pero la idea es manejar todos los elementos enumerados anteriormente en un solo archivo de configuración llamado .hooks4git.ini, que se encuentra dentro de su repositorio y puede llamar a cualquier script que desee llamar, en cualquier idioma .
Usar git hooks es absolutamente fantástico, pero la forma en que se ofrecen generalmente solo aleja a las personas de él.
fuente
Para usuarios de gradle
Encontré estos guiones muy útiles para proyectos de gradle.
build.gradle
apply from: rootProject.file('gradle/install-git-hooks.gradle')
gradle / install-git-hooks.gradle
pre cometido
fuente