Sono uno sviluppatore Mercurial e ho lavorato come consulente Mercurial. Così mi trovo alle vostre domande molto interessante e spero li rispondo:
- Qual è il vantaggio o il valore di commettere a livello locale? [...]
Lei ha ragione che IDE possono tenere traccia delle modifiche locali al di là di semplici undo/redo questi giorni. Tuttavia, c'è ancora una lacuna nella funzionalità tra queste istantanee di file e un sistema di controllo di versione completo.
I commit locali offrono la possibilità di preparare la "storia" localmente prima di inviarla per la revisione. Lavoro spesso su alcune modifiche che coinvolgono 2-5 commit. Dopo aver eseguito commit 4, potrei tornare indietro e modificare commit 2 leggermente (forse ho visto un errore in commit 2 dopo aver effettuato commit 4). In questo modo lavorerò non solo sull'ultimo codice, ma sull'ultimo paio di commit.Questo è banalmente possibile quando tutto è locale, ma diventa più complicato se devi sincronizzare con un server centrale.
- cosa succede se mi schianto il mio disco rigido? [...] quindi, come è bello rispetto al check-in per un repo centrale?
non cool a tutti! :-)
Tuttavia, anche con un repository centrale, è ancora necessario preoccuparsi dei dati non utilizzati nella copia di lavoro. Direi quindi che dovresti avere comunque una soluzione di backup in atto.
È la mia esperienza, che le persone spesso hanno pezzi più grandi di dati non misti che giacciono nelle loro copie di lavoro con un sistema centralizzato. I clienti mi hanno detto che stavano cercando di convincere gli sviluppatori a impegnare almeno una volta alla settimana.
I cambiamenti sono spesso lasciati UNCOMMITED perché:
Essi non sono davvero finiti. Ci potrebbe essere dichiarazioni di stampa di debug del codice, ci potrebbero essere incompleti funzioni, ecc
Commettere sarebbe andato in trunk
e che è pericoloso con un sistema centralizzato dal momento che tutti gli altri impatti.
Per eseguire il commit, è necessario prima creare unione con il repository centrale. Questa unione potrebbe intimidire se si sa che sono state apportate altre modifiche in conflitto al codice. L'unione potrebbe essere semplicemente fastidiosa perché potresti non essere completamente a posto con le modifiche e preferisci lavorare da uno stato di conoscenza.
Il commit può essere lento quando si deve parlare con un server centrale sovraccarico. Se ti trovi in una località offshore, i commit sono ancora più lenti.
Sei assoluta corrette se si pensa che quanto sopra non è davvero una questione di rispetto centralizzato distribted controllo di versione. Con un CVCS, le persone possono lavorare in rami separati e quindi evitare banalmente 2 e 3 sopra. Con un branch separato separato, posso anche impegnarmi quanto desidero dal momento che posso creare un altro ramo in cui applico cambiamenti più chiari (risolvendo 1). I commit possono comunque essere lenti, quindi 4 può essere applicato ancora.
Le persone che utilizzano DVCS spingeranno spesso i loro commit "locali" su un server remoto come soluzione di backup di poveri. Non inviano al server principale dove sta lavorando il resto del team, ma a un altro server (possibilmente privato). In questo modo possono lavorare in isolamento e mantenere comunque backup off-site.
- Lavoro offline o su un aereo. [...]
Sì, non mi è mai piaciuto neanche quell'argomento.Ho una buona connettività Internet il 99% delle volte e non vola abbastanza per essere un problema :-)
Tuttavia, la vera argomentazione non è che tu sia offline, ma che tu possa fingere disconnesso. Più precisamente, puoi lavorare da solo senza dover inviare immediatamente le tue modifiche ad un repository centrale.
Gli strumenti DVCS sono progettati attorno all'idea che le persone possano lavorare offline. Questo ha un certo numero di conseguenze importanti:
L'unione di rami diventa una cosa naturale. Quando le persone possono lavorare in parallelo, le forche si verificano naturalmente nel grafico di commit. Questi strumenti devono quindi essere veramente buoni alle filiali di fusione. Uno strumento come SVN is not very good at merging!
Git, Mercurial e altri strumenti DVCS unire meglio perché hanno avuto più test in quest'area, non direttamente perché sono distribuiti.
Più flessibilità. Con un DVCS, hai la libertà di spingere/tirare le modifiche tra repository arbitrari. Spingo/sposto spesso tra i miei computer di casa e di lavoro, senza utilizzare alcun vero server centrale. Quando le cose sono pronte per la pubblicazione, li spingo in un posto come Bitbucket.
La sincronizzazione di più siti non è più una "funzione aziendale", è una funzionalità integrata. Pertanto, se si dispone di una posizione off-shore, è possibile configurare un repository hub locale e utilizzarlo tra loro. Puoi quindi sincronizzare le ore degli hub locali, ogni giorno o quando ti si addice. Ciò richiede nient'altro che un cronjob che esegue hg pull
o git fetch
ad intervalli regolari.
Migliore scalabilità poiché più logica è sul lato client. Ciò significa meno manutenzione sul server centrale e strumenti più potenti sul lato client.
Con un DVCS, mi aspetto di essere in grado di fare una ricerca per parole chiave attraverso le revisioni del codice(non solo il messaggio commit). Con uno strumento centralizzato, normalmente è necessario impostare uno strumento di indicizzazione supplementare.
Sembra che tu stia cercando una discussione piuttosto che cercare onestamente di essere convinto. Git non è per tutti, né per ogni progetto. Come hai detto ci sono migliaia di argomenti come questo, e se leggi tutto ciò che non ti convince, non usarlo. – David
@David - Mi è piaciuta la tua risposta e, sì, è per questo che non ho votato per il passaggio a DVCS nella mia organizzazione. No, non sto cercando una discussione. Tutto quello che sto cercando è una risposta chiara e concisa per le mie prime 3 domande. –
Joel Spolsky è un buon caso: www.hginit.com –