Un mio collega mi ha detto che sta pensando di fare in modo che il nostro server CI ripristini i commit che hanno fallito la build, quindi il HEAD
in master
è sempre stabile (come nel passare almeno la build).
Questa è una best practice o potrebbe essere più problematica di lasciare solo master
interrotta finché lo sviluppatore non la risolve?
Il mio pensiero è che il ripristino del commit renderà più complesso il compito di leggere il commit e la correzione (lo sviluppatore dovrà ripristinare il ripristino e quindi eseguire il commit della correzione, che ingombra anche il git log
) e dovremmo partire il commit e quindi esegue il commit della correzione. Anche se vedo alcuni vantaggi nell'avere master
stabile, questo ripristino di commit non riuscite non mi convince.
modifica: non importa se è master
o qualsiasi altro ramo di sviluppo, ma la domanda rimane la stessa: il sistema CI dovrebbe ripristinare un commit che ha fallito la compilazione?
un'altra modifica (lenghty): Ok, stiamo usando git
in un modo strano. Crediamo che il concetto di filiali vada contro l'IC reale, perché il commit su una filiale ti isola dagli altri sviluppatori e dai loro cambiamenti e aggiunge tempo quando devi reintegrare la tua filiale e affrontare possibili conflitti. Se tutti si impegnano a master
, questi conflitti vengono ridotti al minimo e ogni commit passa tutti i test.
Ovviamente, questo ti costringe a spingere solo stable (o interrompi la build) e programmare più attentamente per non rompere la compatibilità all'indietro o per attivare o disattivare le funzionalità quando introduci nuove funzionalità.
Ci sono dei compromessi nel fare CI in questo o in quel modo, ma questo è fuori dallo scopo della domanda (vedi domanda correlata per questo). Se preferisci, potrei riformulare la domanda: un piccolo team di sviluppatori lavora insieme in un branch di funzionalità. Se uno sviluppatore commette qualcosa che interrompe la compilazione per quel ramo, dovrebbe il sistema CI ripristinare il commit o no?