Un mio collega mi ha detto che sta pensando di ripristinare il commit del nostro server CI che ha fallito la build, quindi HEADin masterè sempre stabile (come almeno nel passare la build).
È una buona pratica o può essere più problematico che lasciarlo masterrotto 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 masterstabile, questo ripristino dei fallimenti non mi convince.
modifica: non importa se lo è mastero 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 gitin 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 masterquesto 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?
masteriniziare. 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.