¿Pueden las secuencias de commands de gancho de Git ser administradas junto con el repository?

Nos gustaría crear algunas secuencias de commands básicas que todos podamos compartir, como preformatear posts 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.

¿Hay una buena manera de ayudar a todos a get los scripts de gancho correctos? ¿Puedo hacer que esos scripts de gancho apunten a los scripts controlados por la versión en mi repository?

Teóricamente, podría crear un directory de hooks (o el nombre que prefiera) en su directory de proyectos con todos los scripts, y luego vincularlos simbólicamente en .git/hooks . Por supuesto, cada persona que clonó el repository tendría que configurar estos enlaces simbólicos (aunque podría ser realmente elegante y tener un script de deployment que el clonador podría ejecutar para configurarlos de forma semiautomática).

En Git 2.9 , la opción de configuration core.hooksPath especifica un directory de ganchos personalizado.

Mueva sus anzuelos a un directory de seguimiento de hooks en su repository. Luego, configure cada instancia del repository para usar los hooks rastreados en lugar de $GIT_DIR/hooks :

 git config core.hooksPath hooks 

En general, la ruta puede ser absoluta, o relativa al directory donde se ejecutan los man githooks (generalmente la raíz del tree de trabajo; ver la sección DESCRIPCIÓN de man githooks ).

@Jefromi tenía una buena respuesta a una pregunta similar y su respuesta incluía un código que mostraba cómo hacer lo que @mipadi sugiere:

  • Responda a "Poner ganchos git en el repository"

Más allá de eso, aquí hay una buena publicación de blog que encontré sobre el tema:

  • "Cómo include git hooks en un repository Y aún personalizar tu máquina"

¿Qué tal git-hooks , .git/hooks invoca en script bajo el directory de proyectos githooks .

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

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

pre-commit hace que esto sea más fácil para los ganchos 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.

Estamos utilizando soluciones de Visual Studio (y por lo tanto proyectos) que tienen events de compilation previa y posterior. Estoy agregando un proyecto adicional llamado 'GitHookDeployer'. El proyecto auto modifica un file en el evento de creación posterior. Ese file está configurado para copyr al directory de compilation. Por lo tanto, el proyecto se construye todo el time y nunca se omite. En el evento de compilation, también se asegura de que todos los ganchos git estén en su lugar.

Tenga en count que esta no es una solución general, ya que algunos proyectos, por supuesto, no tienen nada que build.