Gli SCM distribuiti sono una cosa che io non riesco a capire. Sono il contrario di quello per cui servirebbe un SCM [cut]
In realta' non sono "il contrario". Sono "il doppio", ed e' proprio questo passaggio in piu' che mi sta sul culo.
Normalmente, quando lavoro con un scm "normale", tiro giu' tutti i giorni l'ultima versione del codice per mantenermi aggiornato. Conservo in locale le mie modifiche fino a che non ho completato il mio task, e poi lo mando al server. Questo evita che io committi dei file "incompleti" che non compilano o non vengono eseguiti correttamente, e che di conseguenza le mie modifiche impattino sul lavoro del team; il prezzo da pagare e' che di questi file, tra la versione che ho preso dal server e quella che mandero' sul server, non ho history.
Questo e' il problema che affronta un scm distribuito.
Da una parte c'e' il repository "centrale"; dall'altra ne ho uno mio "locale" . Ogni volta che arrivo ad un punto che mi interessa conservare del mio codice (che ne so, il codice funziona pero' se ravano un'altra roba funziona meglio - ma non sono sicuro che se ravano quella roba poi non vada tutto a rane), posso fare un commit locale senza intaccare il lavoro degli altri (che pescano dal loro repository locale). Quando il mio task e' pronto, ed e' ora di condividerlo con gli altri, committo il mio repository "locale" su quello "centrale". Male che vada posso sempre fare un revert "locale" e via. Di tutto questo, il resto del team non sa nulla.
Quello che non mi piace e' che poi si passa da dire "aggiornami il progetto in locale" a "aggiornami il repository locale da quello principale, poi la working copy da quello locale, poi...." e alla fine non resta piu' tempo per scrivere codice ._.