Se stai usando un DVCS, dovresti commettere molto spesso. Mi impegno ogni volta che il mio codice è in uno stato stabile, che non è correlato a linee di codice. Vuoi un albero di molti piccoli, commessi atomici che ti rendano facile vedere cosa hai fatto in ciascuno di essi. Se stai cercando di rintracciare una regressione che hai trovato durante il test, questo rende molto più facile fare una ricerca binaria e rintracciare il commit esatto, perché avrai meno modifiche per commit. Mi impegno solo quando compilo il mio codice: la mia idea di "atomico" è che compila, supera i test delle unità di regressione e passa un rapido test di integrazione. A volte è incluso un test unitario, a volte no.
Quando premi, devi spingere intere funzionalità. Il resto del mondo non vuole vedere che il tuo "mancato controllo in questo file" si impegna ogni giorno. Git fornisce rebase
, che ti consente di pulire la tua struttura di commit schiacciando più commit insieme. La comunità sembra essere incerta su quanta storia dovresti impegnarti. Direi che dovresti mettere insieme i commit che non mostrano alcuna storia, come "file mancato" o "regressione stupida". Vuoi presentare una cronologia più pulita che puoi in modo che tutti possano vedere facilmente cosa hai fatto.
In un sistema di controllo della versione centralizzato, devi impegnare molto di più se vuoi mantenere una buona storia. La mia raccomandazione è di lavorare su funzionalità più piccole e completarle il più possibile prima di eseguire il commit. Il tuo concetto di "atomico" dovrebbe essere una funzionalità che funziona e viene testata. Non vuoi impegnare nulla che rompa gli spazi di lavoro di altri sviluppatori, perché si aggiorneranno spesso ed è molto più difficile lavorare su funzionalità indipendenti che si sovrappongono. Impegnerai meno, ma quei commit saranno solitamente più carnosi del tuo DVCS medio.
Puoi vedere che il rapporto tra le righe di codice e il numero di commit dipende da quanto sono grandi le tue funzionalità e dal flusso di lavoro che usi. Il tuo flusso di lavoro sarà diverso a seconda del sistema di controllo della versione che utilizzi, quindi in genere non puoi prevedere quale sarà il tuo commit. Ogni istituzione ha il proprio standard e dovrebbe determinare da sé quale dovrebbe essere idealmente il proprio flusso di lavoro.