Mi piace pensare alla codifica come arrampicata su roccia in questo contesto. Ti arrampichi un po 'e poi metti un'ancora nella roccia. Se dovessi mai cadere, l'ultima ancora che hai piantato è il punto che ti protegge, così non cadrai mai più di qualche metro. Lo stesso con il controllo del codice sorgente; si codifica un po 'e quando si raggiunge una posizione alquanto stabile, si esegue una revisione. Se dovessi fallire in modo orribile, puoi sempre tornare a quell'ultima revisione e sai che è stabile.
Detto questo, se lavori su una squadra, è consuetudine accertarsi che tutto ciò che si commette sia completo, che abbia senso, che si sviluppi in modo pulito e che non infranga le cose altrui. Se devi apportare modifiche più grandi che potrebbero interferire con il lavoro di altre persone, crea un ramo in modo che tu possa commettere senza disturbare nessun altro.
Dipende anche dal sistema SCM che stai utilizzando. I sistemi distribuiti tipicamente rendono la fusione e la foratura indolori e veloci, e puoi effettuare il commit localmente; questo significa che dovresti impegnarti molto e spingere / unire quando hai fatto una notevole quantità di lavoro. Con sistemi centralizzati come svn o cvs, il commit è più costoso e colpisce tutti. Branching risolve parzialmente questo problema, ma poiché accade sul server, può essere dolorosamente lento e la fusione può essere ingombrante. Pertanto, con gli SCM centralizzati, esiste spesso una cultura più attenta, in cui si impegna solo dopo aver svolto una notevole quantità di lavoro.
Per quanto riguarda l'add-on: Per favore, per favore non farlo. Linee di codice, numero di commit, numero di bug trovati / risolti, ecc. Sono tutte misure molto cattive di qualità o quantità pari.