Mi objetivo es verificar los datos de confirmación que no cumplan con ciertos requisitos y luego rechazar la confirmación que se crea o se envía al repositorio remoto.
El problema de hacer un enlace de precompromiso es que es difícil de implementar en muchas personas que tienen que actualizar manualmente su archivo de enlace de precompromiso. Además, Git no le permite tener submódulos en la carpeta .git, lo que hubiera sido muy fácil de implementar aún.
La otra opción que veo es hacer el check-in, creo que el enlace de actualización en el lado remoto, que verificará cada confirmación que es impulsada por un desarrollador y rechazará la inserción si alguna de las confirmaciones falla las pruebas.
¿Alguien tiene alguna idea sobre este problema? Y si es así, ¿podría proporcionarme o señalarme un ejemplo de script de enlace de actualización? Estoy un poco confundido sobre cómo funciona.
Respuestas:
primero debe determinar si no desea que se confirme el código no calificado o que se envíe / publique de nuevo a upstream.
En mi opinión, el último es más factible.
con un DVCS como git. realmente no quieres controlar cómo cada desarrollador usa su repositorio local. y realmente no puedes tener control sobre eso.
un gancho previo al compromiso funciona bien como validación básica y desinfección, si todos los involucrados lo aceptan voluntariamente. De hecho, lo aplicamos libremente en nuestra empresa. sin embargo, siempre se puede omitir con
git commit --no-verify
.el enlace del lado del servidor, por otro lado, no interviene el flujo de trabajo local de un programador, y se asegura de que otros en el proyecto basen su trabajo solo en un código que cumpla con ciertos criterios. normalmente esto es lo que las personas buscan cuando implementan verificaciones automáticas.
Supongo que esta validación automática no pretende reemplazar el control de calidad, que generalmente se logra con la revisión de código o la programación de pares.
si está familiarizado con github , notará que la "solicitud de extracción" es otro enfoque para este problema. muchos proyectos de código abierto y empresas utilizan la solicitud de extracción de github para el control de permisos de sucursales y la revisión de código. pero necesita interacción humana, por lo tanto, puede no ser lo que estás pidiendo.
fuente
Como ya señaló, hacer esto en el cliente, aunque técnicamente es posible, probablemente no sea práctico. Además, muchos usuarios de git realizan trabajos provisionales, por lo que tener controles draconianos en cada confirmación es contraproducente.
La solución estándar sería un enlace del lado del servidor. Probablemente haya configurado un
pre-receive
gancho, que se ejecuta cada vez que entra un empuje, y que puede rechazar el empuje si así lo desea. El resto depende de los controles exactos que desea hacer.Esto se explica en Pro Git , capítulo 7.3 Personalización de Git - Git Hooks .
fuente