Un mio collega mi ha detto che sta pensando di ripristinare il commit del nostro server CI che ha fallito la build, quindi HEAD
in master
è sempre stabile (come almeno nel passare la build).
È una buona pratica o può essere più problematico che lasciarlo master
rotto finché lo sviluppatore non lo 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 ingombrerà anche il git log
) e dovremmo semplicemente lasciare il commit e quindi eseguire il commit fix. Anche se vedo alcuni vantaggi nell'avere master
stabile, questo ripristino dei fallimenti non mi convince.
modifica: non importa se lo è 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 (prolungata): Ok, stiamo usando git
in un modo strano. Riteniamo che il concetto di filiali vada contro la vera CI, perché impegnarsi in 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 in master
questo conflitto si riducono al minimo e ogni commit supera tutti i test.
Naturalmente, questo ti costringe a spingere solo stabile (o interrompi la compilazione) e programma più attentamente per non rompere la compatibilità all'indietro o attivare / disattivare le funzionalità quando si introducono nuove funzionalità.
Ci sono compromessi quando si eseguono operazioni di configurazione in questo modo o in quel modo, ma questo non rientra nel campo di applicazione della domanda (vedere la domanda correlata per questo). Se preferisci, potrei riformulare la domanda: un piccolo team di sviluppatori lavora insieme in un ramo di funzionalità. Se uno sviluppatore commette qualcosa che interrompe la generazione per quel ramo, il sistema CI dovrebbe ripristinare il commit o no?
master
iniziare. Ecco a cosa servono i rami di sviluppo e funzionalità. Tali modifiche vanno quindi in qualcosa come un ramo di integrazione in cui è possibile verificare se tutte le nuove funzionalità di diversi sviluppatori lavoreranno insieme e solo se questo è testato può diventare master. O almeno questo è un possibile flusso di lavoro.