2010-01-12 11 views
25

Utilizamos ganchos Git escritos a medida en nuestro proyecto.Git hooks management

Los ganchos se almacenan en el repositorio de un proyecto y, cuando cambian, para obtener una nueva versión, cada usuario debe copiarlos manualmente en su directorio .git/hooks. Esto es bastante inconveniente.

Una forma de mejorar esto es convertir .git/hooks en un enlace simbólico en el árbol de trabajo. Pero esto implicaría que cada rama (incluso las ramas de características locales del usuario en desarrollo) debería tener la versión más actual de los ganchos. Esto no es conveniente también.

¿Cómo resolvería el problema?

Respuesta

12

Mantenga un repositorio separado de sus enlaces y enlace simbólico en eso.

Estoy de acuerdo, estaría bien si Git tuviera un mecanismo incorporado para propagar secuencias de comandos de ganchos, pero no es así.

+1

Esa es una opción, por supuesto, pero este es un repositorio más para actualizar por la mañana ... Para cada desarrollador. Supongo que necesito algo más de automatización ... –

0

Hicimos .git/hooks un enlace simbólico en el árbol de trabajo.

Para aquellas raras ocasiones en que alguien necesita enviar los archivos que los ganchos rechazarán, utilizamos git commit --no-verify

+0

Ese commit de git --no-verify es peligroso. Es difícil volver a establecer la base cuando tienes commits malos. –

+1

@Alexander, git rebase también tomará una bandera --no-verify. –

+0

Gracias, lo he echado de menos. Aún así ... un truco. :-) –

2

usted podría hacer .git directorio de un repositorio Git del repositorio, y sólo tiene que añadir ganchos y otra configuración a la misma, añadiendo la objects, refs, etc. directorios y archivos como index a su .gitignore. No solo eso, sino que podría configurar un gancho posterior a la recepción para actualizar el metarepo desde su origen. Una vez que haya configurado la configuración inicial, puede hacer que obtenga actualizaciones sin ningún esfuerzo adicional.

Estoy trabajando en los detalles de esto, como lo que debería ir en la lista de ignorar; Mantengo los resultados en las ramas de this repo.