Una discussione è arrivata al lavoro e voglio avere l'opinione di altri programmatori.
Durante la mia permanenza al college, usavamo SVN solo per sourcecontrol. Tutti si collegano allo stesso server e tutte le modifiche vengono trasferite su tutte le macchine. In questo sistema, è facile quando devi spingere le tue modifiche: quando hai finito con le tue modifiche. Tuttavia, questo rende il merging dei changeset di più sviluppatori un incubo completo.
Tuttavia, nell'ultimo anno o giù di lì che ho programmato professionalmente, abbiamo utilizzato Mercurial per il controllo del codice sorgente. All'inizio lo stavo usando come SVN: lavoro su un featur, commetti e spingo tutto in una volta, ma solo quando è finito.
A poco a poco, le mie abitudini hanno iniziato a cambiare. Ho saputo delle filiali, di come i commit potevano essere una bozza, pubblici o segreti e persino di usare una chiavetta USB come deposito centrale. I miei impegni si sono ridotti, ma sono aumentati in quantità. Invece di commettere e spingere in una volta sola, farei dei commit per ogni cambiamento in un ramo chiamato.
Ecco come appare il repository di uno dei miei progetti personali:
Vedounpaiodivantaggiinquestoapproccio.
Ipiccolicommitsignificanochesonofocalizzatisuunsingolosoggetto.Ognicommitriceveunadescrizionediunarigadeicambiamenti,chelirendefacilidaseguireanchedoposettimanediinattività.
Iramiconnometitengonoinargomento.Selavorinelramo"refactor-text-rendering", ad esempio, non dovresti apportare modifiche alla libreria matematica, perché non è correlata all'argomento del ramo.
Tuttavia, lo sviluppatore principale è infastidito dalla mia metodologia. Sente che il piccolo impegna a ingombrare la storia del deposito. La sua metodologia preferita è lavorare in una patch. Quando la funzione è terminata, unisce i commit e li spinge in un colpo solo.
Quindi, cosa preferisci? Un flusso di coscienza, una storia di commit o una patch di cambiamenti ogni tanto? O qualcos'altro interamente?