2009-01-09 11 views
201

Nos gustaría hacer algunos scripts de enlace básicos que todos podamos compartir, por ejemplo, preformatear los mensajes de confirmación. Git tiene scripts de gancho 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 están controlados por la versión.¿Se pueden administrar las secuencias de comandos de gancho de Can Git junto con el repositorio?

¿Hay alguna manera de ayudar a todos a obtener los scripts de enganche correctos? ¿Puedo hacer que esos scripts de gancho apunten a los scripts controlados por la versión en mi repositorio?

+1

Una buena pregunta. Solo desearía que hubiera una mejor respuesta (sin quejas a @mipadi, solo desearía que Git tuviera una manera de hacerlo de una manera más automática, incluso si solo con una opción especificada para clonar git). – lindes

+0

Estoy de acuerdo, @ Lindes! Pero tal vez restringir este intercambio de ganchos en forma intencional? Las cosas se pondrían complicadas para los usuarios de Windows, supongo. – kristianlm

+0

@kristianlm: Hay todo tipo de razones por las que a veces puede ser complicado ... y también cuando es bueno tenerlo allí. Solo desearía que hubiera alguna opción o algo que copiara los ganchos. Supongo que tendré que revisar el código de git-core en algún momento, y hacer un parche. :) (O esperar que alguien más lo haga ... o vivir con la solución en [respuesta de mipadi] (http://stackoverflow.com/a/427269/313756), o lo que sea.) – lindes

Respuesta

105

Teóricamente, podría crear un directorio hooks (o el nombre que prefiera) en su directorio de proyecto con todos los scripts, y luego vincularlos simbólicamente en .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 despliegue que el clonador podría ejecutar para configurarlos de forma semiautomática).

+26

esto no fue trivial, por lo tanto Incluyo un enlace sobre cómo enlazar correctamente: http://stackoverflow.com/questions/4592838/symbolic-link-to-a-hook-in-git –

2

¿Qué hay de git-hooks, ruta .git/hooks invocar en secuencia de comandos en el directorio de proyecto githooks.

También hay muchas características que le permiten minimizar el enlace de copia y enlace simbólico por todas partes.

2

Si su proyecto es un proyecto de JavaScript y usa npm como gestor de paquetes, puede usar shared-git-hooks para aplicar githooks en npm install.

99

En Git 2.9, la opción de configuración core.hooksPath especifica un directorio de ganchos personalizados.

Mueva sus ganchos a un directorio rastreado hooks en su repositorio. A continuación, configure cada instancia del repositorio para que utilice el hooks rastreado en lugar de $GIT_DIR/hooks:

git config core.hooksPath hooks 

En general, la ruta puede ser absoluta o relativa al directorio donde se ejecutan los ganchos (por lo general el árbol de trabajo raíz, vea la sección DESCRIPCIÓN de man githooks).

+8

... y el directorio de ganchos para señalar puede ser un repositorio de ganchos separados;) –

+3

Bueno, ¿este parámetro de configuración se establece automáticamente cuando haces un clon git? – Ring

+3

Como regla, las variables de git config no pueden ser configuradas por el repositorio que está clonando. Creo que esto es para evitar la ejecución de código arbitrario. git config controla la ejecución del código a través de los enganches, el nombre del usuario en los mensajes de confirmación y otras funciones importantes. –

1

pre-commit hace que esto sea fácil para los ganchos de pre-commit. No responde la pregunta del OP sobre la gestión de cualquier gancho de git arbitrario, pero los ganchos de precompromiso son probablemente los más utilizados para la calidad del código.

0

Estamos usando soluciones de Visual Studio (y por lo tanto proyectos) que tienen eventos de compilación previa y posterior. Estoy agregando un proyecto adicional llamado 'GitHookDeployer'. El proyecto auto modifica un archivo en el evento de creación posterior. Ese archivo está configurado para copiar al directorio de compilación. Por lo tanto, el proyecto se construye todo el tiempo y nunca se omite. En el evento de compilació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.

0

La mayoría de los lenguajes de programación modernos, o más bien sus herramientas de compilación, admiten complementos para administrar los ganchos de git. Eso significa que todo lo que necesita hacer es configurar su paquete.json, pom.xml, etc., y cualquiera en 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/olukyrich/githook-maven-plugin

https://www.npmjs.com/package/git-hooks

Cuestiones relacionadas