Vorrei aggiungere un hook di aggiornamento per git che impedisca alle persone di spingere codice java che non verrà compilato. Idealmente chiamerebbe javac, vedere il risultato e consentire o rifiutare la spinta.Come posso fare in modo che git rifiuti il push del codice che non verrà compilato?
L'esempio più comune di qualcosa che voglio evitare è che qualcuno non commetta tutte le sue modifiche rompendo così la costruzione. Tuttavia, è a mia conoscenza che git git girano sul client (non sul server), quindi se succede quanto sopra, il gancio permetterà comunque la spinta.
Qual è il modo migliore per impedire alle persone di interrompere la compilazione con commit incompleti?
UPDATE:
Hai una versione primitiva della lavorazione gancio, grazie per tutto l'aiuto!
Estratto dal gancio aggiornamento:
### 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
(notare che questo è un ambiente Windows e si basa su ANT_HOME (e quindi JAVA_HOME) variabili d'ambiente in fase di definizione)
Compilare un progetto ad ogni spinta può essere proibitivo; se è così, 'integrazione continua' è cosa google. – 9000
+1 per l'integrazione continua. –
Per quanto riguarda l'integrazione continua, ne sono un grande fan e utilizziamo Hudson per il nostro progetto principale. Questo è un progetto parallelo e voglio solo qualcosa di veramente semplice che impedisca alle persone di essere in grado di controllare il codice che interrompe la compilazione, in questo modo nessun altro (in questo caso le macchine virtuali che eseguono script) può controllare una build non funzionante. – Zugwalt