Nota: consultare "MODIFICA" per la risposta alla domanda corrente
Prima di tutto, leggi la rieducazione di Subversion di Joel Spolsky. Penso che la maggior parte delle tue domande avranno una risposta lì.
Un'altra raccomandazione, il discorso di Linus Torvalds su Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Quest'altro potrebbe anche rispondere alla maggior parte delle tue domande ed è piuttosto divertente.
A proposito, qualcosa che trovo abbastanza divertente: persino Brian Fitzpatrick e Ben Collins-Sussman, due dei creatori originali di sovversione hanno detto in un discorso di Google "mi dispiace" riferendosi alla sovversione che è inferiore al mercuriale (e ai DVCS in generale).
Ora, IMO e in generale, le dinamiche di gruppo si sviluppano in modo più naturale con qualsiasi DVCS e un vantaggio eccezionale è che puoi impegnarti offline perché implica le seguenti cose:
- Non dipendi da un server e una connessione, il che significa tempi più rapidi.
- Non essere schiavo di luoghi in cui è possibile ottenere l'accesso a Internet (o una VPN) solo per essere in grado di impegnarsi.
- Ognuno ha un backup di tutto (file, cronologia), non solo del server. Ciò significa che chiunque può diventare il server .
- Puoi impegnarti compulsivamente, se necessario, senza fare confusione con il codice degli altri . Gli commit sono locali. Non ti calpesti le dita dei piedi mentre commetti. Non rompere le build o gli ambienti degli altri semplicemente impegnandosi.
- Le persone senza "accesso di commit" possono eseguire il commit (poiché il commit in un DVCS non implica il caricamento di codice), abbassando la barriera per i contributi, puoi decidere di eseguire le modifiche o meno come integratore.
- Può rafforzare la comunicazione naturale poiché un DVCS lo rende essenziale ... nella sovversione ciò che hai invece sono razze commesse, che forzano la comunicazione, ma ostacolando il tuo lavoro.
- I collaboratori possono unirsi e gestire la propria fusione, il che significa alla fine meno lavoro per gli integratori.
- I contributori possono avere i loro rami senza influenzare quelli degli altri (ma essere in grado di condividerli se necessario).
Sui tuoi punti:
- La fusione dell'inferno non esiste in DVCSland; non ha bisogno di essere gestito. Vedi il prossimo punto .
- Nei DVCS, ognuno rappresenta un "ramo", il che significa che ci sono fusioni ogni volta che vengono apportate modifiche. I rami nominati sono un'altra cosa.
- Se lo desideri, puoi continuare a utilizzare l'integrazione continua. Non è necessario l'IMHO, perché aggiungere complessità? Basta continuare i test come parte della propria cultura / politica.
- Mercurial è più veloce in alcune cose, git è più veloce in altre cose. Non proprio ai DVCS in generale, ma alle loro particolari implementazioni AFAIK.
- Tutti avranno sempre il progetto completo, non solo tu. La cosa distribuita ha a che fare con il fatto che puoi impegnarti / aggiornare localmente, la condivisione / presa dall'esterno del tuo computer si chiama push / pull.
- Ancora una volta, leggi la rieducazione di Subversion. I DVCS sono più facili e più naturali, ma sono diversi, non provare a pensare che cvs / svn === sia la base di tutto il controllo delle versioni.
Stavo contribuendo con un po 'di documentazione al progetto Joomla per aiutare a predicare una migrazione ai DVCS, e qui ho realizzato alcuni diagrammi per illustrare centralizzato vs distribuito.
centralizzata
Distribuito in medicina generale
Distribuito al massimo
Vedi nel diagramma c'è ancora un "repository centralizzato", e questo è uno degli argomenti preferiti dai fan della versione centralizzata: "sei ancora centralizzato", e no, non lo sei, dal momento che il repository "centralizzato" è solo un repository tutti concordano (ad es. un repository github ufficiale), ma questo può cambiare in qualsiasi momento.
Ora, questo è il tipico flusso di lavoro per progetti open source (ad es. Un progetto con una massiccia collaborazione) che utilizzano DVCS:
Bitbucket.org è in qualche modo un equivalente github per mercurial, sappi che hanno repository privati illimitati con spazio illimitato, se la tua squadra è più piccola di cinque puoi usarlo gratuitamente.
Il modo migliore per convincerti di usare un DVCS è provare un DVCS, ogni sviluppatore DVCS esperto che ha usato svn / cvs ti dirà che ne vale la pena e che non sanno come sono sopravvissuti per tutto il loro tempo senza di esso.
EDIT : Per rispondere alla tua seconda modifica, posso solo ribadire che con un DVCS hai un flusso di lavoro diverso, ti consiglio di non cercare motivi per non provarlo a causa delle migliori pratiche , è come quando le persone sostengono che OOP non lo è necessario perché possono aggirare complessi schemi di progettazione con ciò che fanno sempre con il paradigma XYZ; puoi beneficiare comunque.
Provalo, vedrai come lavorare in "una filiale privata" è in realtà un'opzione migliore. Uno dei motivi per cui posso dire perché l'ultimo è vero è perché perdi la paura di impegnarti , permettendoti di impegnarti in ogni momento che ritieni opportuno e lavorare in modo più naturale.
Riguardo a "fondere l'inferno", dici "a meno che non stiamo sperimentando", io dico "anche se stai sperimentando + mantenendo + lavorando contemporaneamente nella v2.0 rinnovata ". Come dicevo prima, la fusione dell'inferno non esiste perché:
- Ogni volta che ti impegni generi una filiale senza nome e ogni volta che i tuoi cambiamenti incontrano i cambiamenti di altre persone, si verifica una fusione naturale.
- Poiché i DVCS raccolgono più metadati per ogni commit, si verificano meno conflitti durante l'unione ... quindi potresti persino chiamarlo "unione intelligente".
- Quando ti imbatti in conflitti di unione, questo è ciò che puoi usare:
Inoltre, le dimensioni del progetto non contano, quando sono passato dalla sovversione in realtà stavo già vedendo i vantaggi mentre lavoravo da solo, tutto sembrava giusto. I changeset (non esattamente una revisione, ma un insieme specifico di modifiche per file specifici che includi un commit, isolato dallo stato della base di codice) ti consentono di visualizzare esattamente cosa intendevi facendo quello che stavi facendo a un gruppo specifico di file, non l'intera base di codice.
Per quanto riguarda il funzionamento dei changeset e l'incremento delle prestazioni. Proverò a illustrarlo con un esempio che mi piace fare: il passaggio al progetto mootools da svn è illustrato nel loro grafico di rete github .
Prima
Dopo
Quello che vedi è che gli sviluppatori sono in grado di concentrarsi sul proprio lavoro mentre commettono, senza il timore di infrangere il codice degli altri, si preoccupano di rompere il codice degli altri dopo aver premuto / tirato (DVCS: prima commetti, poi premi / tira, quindi aggiorna ) ma poiché la fusione qui è più intelligente, spesso non lo fanno mai ... anche quando c'è un conflitto di unione (che è raro), passi solo 5 minuti o meno a risolverlo.
La mia raccomandazione è di cercare qualcuno che sappia usare mercurial / git e di dirgli di spiegarglielo direttamente. Trascorrendo circa mezz'ora con alcuni amici nella riga di comando mentre usavamo mercurial con i nostri desktop e account bitbucket che mostravano loro come unirsi, persino fabbricando conflitti per loro per vedere come risolvere in un ridicolo ammontare di tempo, sono stato in grado di mostrare loro il vero potere di un DVCS.
Infine, ti consiglio di usare mercurial + bitbucket invece di git + github se lavori con Windows. Mercurial è anche un po 'più semplice, ma git è più potente per una gestione dei repository più complessa (ad esempio git rebase ).
Alcune letture consigliate aggiuntive: