Cosa vedono le persone qui come i relativi punti di forza e di debolezza di Git, Mercurial e Bazaar?
A mio avviso, la forza di Git è il suo design essenziale e ricco di funzionalità. Ha anche il miglior supporto per i repository multi-branch e la gestione di flussi di lavoro pesanti. È molto veloce e ha dimensioni ridotte del repository.
Ha alcune funzionalità che sono utili ma che richiedono un certo sforzo per essere utilizzate. Questi includono ara (indice) di stadiazione intermedia visibile tra l'area di lavoro e il database del repository, che consente una migliore risoluzione di fusione in casi più complicati, commit incrementale e commit con albero sporco; rilevare rinominazioni e copie usando l'euristica della somiglianza piuttosto che rintracciarle utilizzando un qualche tipo di ID file, che funziona bene e che consente la colpa (annotazione) che può seguire il movimento del codice attraverso i file e non solo rinominazioni all'ingrosso.
Uno degli svantaggi è che il supporto di MS Windows è in ritardo e non è completo. Un altro svantaggio percepito è che non è ben documentato come ad esempio Mercurial, ed è meno facile da usare rispetto alla concorrenza, ma cambia.
A mio avviso, la forza di Mercurial risiede nelle sue buone prestazioni e nelle dimensioni ridotte del repository, nel suo buon supporto per MS Windows.
Il principale svantaggio è a mio avviso il fatto che le filiali locali (più filiali in un unico repository) sono ancora cittadini di seconda classe e in modo strano e complicato implementano i tag. Anche il modo in cui gestisce le ridenominazioni dei file era subottimale (ma questa larghezza è cambiata). Mercurial non supporta le fusioni di polpo (con più di due genitori).
Da quello che ho sentito e letto i principali vantaggi di Bazaar è il facile supporto per il flusso di lavoro centralizzato (che è anche uno svantaggio, con concetti centralizzati visibili dove non dovrebbe), tracciare i nomi di file e directory.
Il suo principale svantaggio sono le prestazioni e le dimensioni del repository per repository di grandi dimensioni con una storia non lineare lunga (le prestazioni sono migliorate almeno per repository non troppo grandi), il fatto che il paradigma predefinito è un ranch per repository (è possibile impostarlo per condividere i dati, tuttavia) e concetti centralizzati (ma anche da quello che ho sentito cambiare).
Git è scritto in C, script di shell e Perl ed è scriptabile; Mercurial è scritto in C (core, per prestazioni) e Python e fornisce API per le estensioni; Bazaar è scritto in Python e fornisce API per le estensioni.
Nel considerare ciascuno di essi tra loro e contro i sistemi di controllo della versione come SVN e Perforce, quali problemi dovrebbero essere considerati?
I sistemi di controllo versione come Subversion (SVN), Perforce o ClearCase sono sistemi di controllo versione centralizzati . Git, Mercurial, Bazaar (e anche Darcs, Monotone e BitKeeper) sono sistemi di controllo della versione distribuiti . I sistemi di controllo della versione distribuita consentono una gamma molto più ampia di flussi di lavoro. Consentono di utilizzare "pubblica quando è pronto". Offrono un supporto migliore per la ramificazione e l'unione e per flussi di lavoro pesanti. Non è necessario fidarsi delle persone con accesso commit per poter ottenere contributi da loro in modo semplice.
Nel pianificare una migrazione da SVN a uno di questi sistemi di controllo della versione distribuita, quali fattori considereresti?
Uno dei fattori che potresti voler prendere in considerazione è il supporto per l'intrattazione con SVN; Git ha git-svn, Bazaar ha bzr-svn e Mercurial ha l'estensione hgsubversion.
Dichiarazione di non responsabilità: sono un utente Git e un collaboratore di piccole dimensioni e guardo (e partecipo alla) mailing list di git. Conosco Mercurial e Bazaar solo dalla loro documentazione, varie discussioni su IRC e mailing list, post sul blog e articoli che confrontano vari sistemi di controllo delle versioni (alcuni dei quali sono elencati nella pagina GitComparison su Git Wiki).