Me gustaría agregar una actualización de gancho a git que evita que las personas presionen el código java que no compilará. Lo ideal sería llamar a javac, ver el resultado y permitir o rechazar el empuje.¿Cómo puedo hacer para que git rechace presionar el código que no se compilará?
El ejemplo más común de algo que quiero evitar es que alguien no realice todos los cambios y se rompa la compilación. Sin embargo, tengo entendido que los ganchos de git se ejecutan en el cliente (no en el servidor), de modo que si sucede lo anterior, el gancho aún permitirá la inserción.
¿Cuál es la mejor manera de evitar que las personas rompan la construcción con confirmaciones incompletas?
ACTUALIZACIÓN:
Tienes una versión primitiva del trabajo de gancho, gracias por toda la ayuda!
Extracto de actualización de gancho:
### make sure code compiles
## currently does this by copying the state of the repository as of the pushed code and attempting to build it
# for now, hard coded as C:\Windows\Temp
copydir="/c/Windows/Temp/git_hook_compile_copy"
echo "making copy of $newrev to $copydir" >&2
rm -rf "$copydir"
mkdir "$copydir"
git archive $newrev | tar -x -C $copydir/
if [ "$?" != "0" ]; then
echo "*** unable to make copy of code" >&2
exit 1
fi
echo "attempting to build $newrev" >&2
"$ANT_HOME/bin/ant" -file "$copydir/appropriatePath/build.xml"
if [ "$?" != "0" ]; then
echo "*** code does not compile" >&2
exit 1
fi
(tenga en cuenta que esto es para un entorno de ventanas y se basa en ANT_HOME (y por lo tanto JAVA_HOME) variables de entorno que se definen)
La compilación de un proyecto en cada inserción puede ser prohibitivamente costosa; si es así, 'integración continua' es lo que googlear. – 9000
+1 para integración continua. –
Con respecto a la integración continua, también soy un gran admirador de ella y usamos Hudson para nuestro proyecto principal. Este es un proyecto paralelo y solo quiero algo realmente simple que evite que las personas puedan verificar el código que rompe la compilación, de esa manera nadie más (en este caso las máquinas virtuales que ejecutan scripts) puede verificar una compilación rota. – Zugwalt