Estoy planeando escribir algunos ganchos de git como un proyecto que registra las acciones del usuario en una base de datos. Esta base de datos se puede usar para consultar todas sus actividades. Las acciones que estoy tratando de iniciar la sesión sonGit personalización de gancho global
- cometer
- tirón
- empuje
- fusión
- rama
quiero conseguir esto empaquetado en distribuciones que se pueden instalar a través gerente de empaquetación. Git permite enlaces globales mediante la colocación de cualquier tipo en $PREFIX/share/templates/hooks
la actualidad cuenta con unos ganchos que son discapacitados (.sample
se adjunta a su nombre). Cuando se crea un nuevo repositorio, estos ganchos se copian en la carpeta del repositorio .git
Ahora bien, si un usuario instala el paquete de estos ganchos y ganchos como post-commit
y post-update
ya están habilitados. ¡En este caso, se sobrescribirá el archivo de script! Esto suena mal
Esto significa que git solo tiene un archivo hook por acción. Si necesito mantener tres ganchos para una acción, significa que no es posible. Esto significa que la instalación automatizada desde el administrador de paquetes puede generar conflictos.
Ahora piense que empaquetamos los ganchos para sobreescribir el archivo habilitado predeterminado. Si un usuario desea agregar algunas acciones más a esos archivos y luego decidió desinstalar mi paquete, ¿entonces su comando personalizado también desaparecería?
pensé que git fue muy inteligente en este sentido y que estaba mal :(
Es necesario que una carpeta se llamará post-commit
y post-update
acciones o lo que sea y git debe ejecutar todos los scripts dentro de esa carpeta. Soy sigue buscando una forma de lidiar con la situación actual.
Puede echar un vistazo a esta [pregunta sobre el seguimiento de los ganchos de git] (http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository) - Publiqué una implementación barebones de la instalación de enlaces simbólicos en el directorio hooks, que ejecuta los hooks apropiados; es fácilmente extensible a múltiples hooks para la misma tarea y también permite a los usuarios dejar atrás sus propios hooks locales. – Cascabel
Nota: Un simple "ejecutar una lista de scripts" no funcionará correctamente para todos los tipos de enlace porque algunos de ellos esperan recibir datos en stdin (por ejemplo, pre-recibir, post-recibir, post-reescribir); en la mayoría de las implementaciones ingenuas, el primer script que se ejecutaba captaba todos los datos y el resto no obtenía nada (EOF). Podría funcionar para capturar los datos una vez y alimentarlos a cada script, pero eso puede no ser apropiado para todos los scripts/situaciones. –
Jefromi, gracias. Parece bueno que el enlace simbólico pueda ser una solución, pero una vez más, el problema es ¿cómo parchear git en cada máquina para que las copias de git init enganchen enlaces simbólicos a una carpeta? ¿Algún buen ejemplo? –