Was sehen die Leute hier als die relativen Stärken und Schwächen von Git, Mercurial und Bazaar?
Meiner Meinung nach ist die Stärke von Git das saubere Design und die sehr umfangreichen Funktionen. Ich denke auch, dass dies die beste Unterstützung für Repositorys mit mehreren Filialen und die Verwaltung von Workflows mit vielen Filialen bietet. Es ist sehr schnell und hat eine kleine Repository-Größe.
Es hat einige Funktionen, die nützlich sind, aber einige Anstrengungen erfordern, um an sie gewöhnt zu sein. Dazu gehören sichtbare Zwischen-Staging-Ara (Index) zwischen Arbeitsbereich und Repository-Datenbank, die eine bessere Zusammenführungsauflösung in komplizierteren Fällen, inkrementelles Festschreiben und Festlegen mit schmutzigem Baum ermöglichen. Erkennen von Umbenennungen und Kopien mithilfe von Ähnlichkeitsheuristiken, anstatt sie mithilfe von Datei-IDs zu verfolgen, was gut funktioniert und Schuldzuweisungen (Anmerkungen) zulässt, die der Codebewegung über Dateien hinweg folgen können und nicht nur Umbenennungen im Großhandel.
Einer der Nachteile ist, dass die MS Windows-Unterstützung hinterherhinkt und nicht voll ist. Ein weiterer wahrgenommener Nachteil ist, dass es nicht so gut dokumentiert ist wie beispielsweise Mercurial und weniger benutzerfreundlich als die Konkurrenz ist, sich jedoch ändert.
Meiner Meinung nach liegt die Stärke von Mercurial in der guten Leistung und der geringen Größe des Repositorys sowie in der guten Unterstützung von MS Windows.
Der Hauptnachteil ist meiner Meinung nach die Tatsache, dass lokale Zweigstellen (mehrere Zweigstellen in einem einzigen Repository) immer noch Bürger zweiter Klasse sind und auf seltsame und komplizierte Weise Tags implementieren. Auch die Art und Weise, wie mit Dateiumbenennungen umgegangen wird, war nicht optimal (aber diese Größe hat sich geändert). Mercurial unterstützt keine Octopus-Zusammenführungen (mit mehr als zwei Elternteilen).
Was ich von den wichtigsten Vorteilen von Bazaar gehört und gelesen habe, ist die einfache Unterstützung des zentralisierten Workflows (was auch ein Nachteil ist, da zentralisierte Konzepte dort sichtbar sind, wo sie nicht angezeigt werden sollten) sowie die Verfolgung der Umbenennung von Dateien und Verzeichnissen.
Der Hauptnachteil ist die Leistung und die Repository-Größe für große Repositorys mit langem nichtlinearem Verlauf (die Leistung wurde zumindest für nicht zu große Repositorys verbessert). Die Tatsache, dass das Standardparadigma eine Ranch pro Repository ist (Sie können es jedoch so einrichten, dass Daten gemeinsam genutzt werden). und zentralisierte Konzepte (aber auch das, was ich gehört habe, ändert sich).
Git ist in C, Shell-Skripten und Perl geschrieben und kann geschrieben werden. Mercurial ist in C (Kern, für Leistung) und Python geschrieben und bietet API für Erweiterungen. Bazaar ist in Python geschrieben und bietet API für Erweiterungen.
Welche Probleme sollten bei der Betrachtung der einzelnen Elemente untereinander und gegen Versionskontrollsysteme wie SVN und Perforce berücksichtigt werden?
Versionskontrollsysteme wie Subversion (SVN), Perforce oder ClearCase sind zentralisierte Versionskontrollsysteme. Git, Mercurial, Bazaar (und auch Darcs, Monotone und BitKeeper) sind verteilte Versionskontrollsysteme. Verteilte Versionskontrollsysteme ermöglichen ein viel breiteres Spektrum an Workflows. Sie erlauben die Verwendung von "Veröffentlichen, wenn fertig". Sie bieten eine bessere Unterstützung für das Verzweigen und Zusammenführen sowie für verzweigungsintensive Workflows. Sie müssen Personen mit Commit-Zugriff nicht vertrauen, um auf einfache Weise Beiträge von ihnen erhalten zu können.
Welche Faktoren würden Sie bei der Planung einer Migration von SVN zu einem dieser verteilten Versionskontrollsysteme berücksichtigen?
Einer der Faktoren, die Sie berücksichtigen sollten, ist die Unterstützung für das Abziehen mit SVN. Git hat git-svn, Bazaar hat bzr-svn und Mercurial hat die Erweiterung hgsubversion.
Haftungsausschluss: Ich bin Git-Benutzer und kleiner Zeitspender und schaue mir die Git-Mailingliste an (und nehme daran teil). Ich kenne Mercurial und Bazaar nur aus ihrer Dokumentation, verschiedenen Diskussionen über IRC und Mailinglisten sowie Blog-Posts und Artikeln, in denen verschiedene Versionskontrollsysteme verglichen werden (von denen einige auf der GitComparison- Seite im Git-Wiki aufgeführt sind).