Frage

Was Leute hier zu sehen, wie die relativen Stärken und Schwächen der Git, Mercurial tun, und Bazaar?

In jeden von ihnen untereinander und gegen Versionskontrollsysteme wie SVN und Perforce unter Berücksichtigung, welche Probleme in Betracht gezogen werden sollte?

In einer Migration von SVN auf eine dieser verteilten Versionskontrollsysteme planen, welche Faktoren würden Sie in Betracht ziehen?

War es hilfreich?

Lösung

Git ist sehr schnell, skaliert sehr gut und ist sehr transparent über ihre Konzepte. Die Kehrseite davon ist, dass es eine relativ steile Lernkurve hat. Eine Win32-Port ist vorhanden, aber nicht ganz ein Bürger erster Klasse. Git macht Hashes als Versionsnummern für die Nutzer; Dies bietet Garantien (in, daß ein einzelner Hash bezieht sich immer auf genau der gleichen Inhalte, ein Angreifer nicht die Geschichte ändern kann, ohne entdeckt zu werden), kann aber für den Benutzer beschwerlich sein. Git hat ein einzigartiges Konzept der Tracking-Dateiinhalt, auch wenn diese Inhalte zwischen Dateien zu verschieben und Ansichten Dateien als First-Level-Objekte, aber Verzeichnisse nicht verfolgen. Ein weiteres Problem mit git ist, dass viele Operationen (wie Fütterungsmaterial ) hat, die es leicht machen, die Geschichte zu ändern (in gewissem Sinne - die durch einen Hash bezeichnet Inhalt wird sich nie ändern, aber Verweise auf diesen Hash kann verloren gehen); einige Puristen (mich eingeschlossen) gefällt, dass nicht sehr viel.

Bazaar ist recht schnell (sehr schnell für Bäume mit flacher Geschichte, aber derzeit skaliert schlecht mit der Geschichte Länge) und ist einfach zu lernen, diejenigen, die mit den Befehlszeilenschnittstellen der traditionellen SCMs (CVS, SVN, usw. ). Win32 ist ein First-Class-Ziel durch das Entwicklungsteam berücksichtigt. Es verfügt über eine steckbare Architektur für verschiedene Komponenten und ersetzt sein Speicherformat häufig; Dies ermöglicht es ihnen, neue Funktionen (für die Integration mit Versionskontrollsystemen wie einer bessere Unterstützung auf der Basis verschiedene Konzepte) einzuführen und die Leistung zu verbessern. Das Basar-Team hält Verzeichnis Tracking und benennen Unterstützung First-Class-Funktionalität. Während global eindeutige revisions id Bezeichner für alle Revisionen, Baum lokalen revnos (Standardrevisionsnummern, die eher denen von svn oder andere konventionellere SCMs verwendet) verfügbar sind, werden zur Identifizierung von Änderungen anstelle von Content-Hashes verwendet. Bazaar hat die Unterstützung für „leichte Kassen“, in dem die Geschichte auf einem Remote-Server statt kopiert nach unten auf das lokale System gehalten wird, und wird automatisch über das Netzwerk bezeichnet, wenn nötig; Derzeit ist dies einzigartig unter DSCMs.

Beide haben irgendeine Form von SVN-Integration zur Verfügung; jedoch bzr-svn ist wesentlich leistungsfähiger als git-svn, vor allem wegen Revisionen Backend-Formats zu diesem Zweck eingeführt. [Update, ab 2014: Das Drittanbieter-Handelsprodukt SubGit stellt eine bidirektionale Schnittstelle zwischen SVN und Git, die in Treue ist vergleichbar mit BZR-svn, und deutlich mehr poliert; I stark seine Verwendung über die von git-svn empfehlen, wenn Budget und Lizenzbeschränkungen erlauben].

Ich habe nicht Mercurial ausgiebig verwendet und so nicht im Detail äußern kann - außer zu beachten, dass es, wie Git, hat Content-Hash für Revisionen Adressierung; auch wie Git, es nicht behandeln Verzeichnisse als First-Class-Objekte (und ein leeres Verzeichnis nicht speichern kann). Es ist jedoch schneller als jede andere DSCM mit Ausnahme von Git und hat viel bessere IDE-Integration (vor allem für Eclipse) als jeder ihrer Wettbewerber. Aufgrund seiner Leistungsmerkmale (die hinter denen von Git nur wenig hinken) und seiner überlegenen Cross-Plattform und IDE-Unterstützung, Mercurial kann für Team mit einem signifikanten Anzahl von win32-centric oder IDE-gebundenen Mitgliedern überzeugend.

Ein Anliegen von SVN in der Migration ist, dass SVN GUI-Frontends und IDE-Integration ist reifer als die von jedem des verteilten SCMs. Auch, wenn Sie derzeit machen starken Gebrauch von precommit Skript Automatisierung mit SVN (dh erfordern Unit-Tests zu bestehen, bevor ein Commit fortfahren.), Werden Sie wahrscheinlich ein Werkzeug ähnlich wie PQM für Anfragen an Ihren gemeinsamen Filialen fusionieren zu automatisieren.

SVK ist ein DSCM der Subversion als Zusatzspeicher verwendet, und hat ziemlich gute Integration mit SVN-centric-Tool. Es hat sich jedoch dramatisch schlechtere Leistung und Skalierbarkeit Eigenschaften als jede andere große DSCM (auch Darcs) und solltevermieden für Projekte, die entweder in Bezug auf Länge der Geschichte oder die Anzahl der Dateien groß haften wachsen.

[über den Autor: Ich benutze Git und Perforce für die Arbeit, und Bazaar für meine persönlichen Projekte und als eingebettete Bibliothek; andere Teile der Organisation meines Arbeitgebers verwenden Mercurial stark. In einem früheren Leben baute ich viel Automatisierung um SVN; vor, dass ich habe Erfahrung mit GNU Arch, BitKeeper, CVS und andere. Git war ziemlich zunächst abstoßend - es fühlte sich wie GNU Arch da ein Konzept lastigen Umgebung zu sein, als zu Toolkits Gegensatz gebaut die Auswahl des Benutzers von Workflows anzupassen - aber ich habe da kommen werden ganz bequem mit it].

Andere Tipps

Steve Streeting des Ogre 3D-Projekt nur (2009.09.28) veröffentlicht zu diesem Thema einen Blog-Eintrag, wo er hat eine große und sogar handed Vergleich von Git, Mercurial und Bazaar .

Am Ende findet er Stärken und Schwächen mit allen drei und keinen klaren Sieger. Auf der positiven Seite, gibt er eine große Tabelle, die Sie entscheiden, welche mit zu gehen.

alt text

Es ist eine kurze lesen, und ich empfehle es.


Was tun hier Leute sehen, wie die relativen Stärken und Schwächen der Git, Mercurial und Bazaar?

Meiner Meinung nach Git Stärke ist das saubere zugrunde liegendes Design und sehr umfangreiche Funktionen. Es hat auch ich denke, die beste Unterstützung für Multi-Zweig-Repositories und die Verwaltung von Zweiglastigen Workflows. Es ist sehr schnell und hat kleine Repository Größe.

Es hat einige Funktionen, die nützlich sind, aber einige Mühe zu ihnen verwendet werden. Die schließen sichtbar Zwischen Staging ara (Index) zwischen Arbeitsbereich und Repository-Datenbank, die für eine bessere merge Auflösung in komplizierteren Fällen, inkrementelles comitting und comitting mit schmutzigem Baum erlaubt; Erfassungs umbenennt und Kopien Ähnlichkeit mit heuristischer anstatt Tracking sie eine Art von Datei-IDs verwenden, die gut funktioniert, und die es erlauben, für Schuld (mit Anmerkungen versehen), die Code-Bewegung über Dateien folgen kann und nicht nur Großhandel Umbenennungen.

Einer der Nachteile ist, dass MS-Windows-Unterstützung hinkt und ist nicht voll. Ein weiterer wahrgenommen Nachteil ist, dass es nicht so gut ist, wie zum Beispiel Mercurial dokumentiert und ist weniger benutzerfreundlich als die Konkurrenz, aber es ändert sich.

Meiner Meinung nach Mercurial Stärke liegt in seiner guten Leistung und kleine Repository Größe, in seiner guten MS-Windows-Unterstützung.

Der Haupt disadvanatge ist meiner Meinung nach, dass die Tatsache Ortsvereine (mehrere Filialen in einzelnen Repository) noch Bürger zweiter Klasse ist, und in seltsame und komplizierte Art und Weise Tags es implementiert. Auch die Art und Weise es befasst sich mit Dateiumbenennungs war suboptimal (aber das migth geändert haben). Mercurial nicht Krake verschmilzt unterstützen (mit mehr als zwei Eltern).

Von dem, was ich habe gehört und gelesen Haupt Bazaar Vorteile sind es einfache Unterstützung für die zentrale Workflow (der auch Nachteil ist, mit einem zentralen Konzepten sichtbar, wo es nicht soll), Umbenennungen beiden Dateien zu verfolgen und Verzeichnisse.

Sein größter Nachteil ist Leistung und Repository-Größe für große Repositories mit langer nicht-linearer Geschichte (verbesserte die Leistung zumindest für nicht zu große Repositories), die Tatsache, dass Standard-Paradigma ist eine Ranch pro Repository (Sie können sie einrichten Daten zu teilen , obwohl) und zentrale Konzepte (aber das auch von dem, was ich Änderungen gehört habe).

Git ist in C geschrieben, Shell-Skripte und Perl und ist skriptfähig; Mercurial wird in C (Kern, für die Leistung) geschrieben und Python und stellt API für Erweiterungen; Bazaar ist in Python geschrieben und stellt API für Erweiterungen.


eine andere und gegen Versionskontrollsysteme wie SVN und Perforce, mit einem jeden von ihnen in Anbetracht dessen, was Probleme in Betracht gezogen werden sollte?

Versionskontrollsysteme wie Subversion (SVN), Perforce oder Clearcase sind zentralisiert Versionskontrollsysteme. Git, Mercurial, Basar (und auch Darcs, Monotone und BitKeeper) sind verteilt Versionskontrollsysteme. Verteiltes Versionskontrollsysteme ermöglichen viel breitere Palette von Workflows. Sie erlauben „veröffentlichen, wenn bereit“ zu verwenden. Sie haben eine bessere Unterstützung für das Verzweigen und Zusammenführen und für branchen schwerer Workflows. Sie brauchen nicht Leute zu vertrauen mit Zugang zu begehen zu können Beiträge auf einfache Art und Weise von ihnen erhalten.


In einer Migration von SVN auf eine dieser verteilten Versionskontrollsysteme planen, welche Faktoren würden Sie in Betracht ziehen?

Einer von Faktoren, die Sie betrachten wünschen könnte, ist die Unterstützung mit SVN für inetracting; Git hat git-svn, Bazaar hat bzr-svn und Mercurial hat hgsubversion Erweiterung.

Hinweis: Ich bin Git Anwender und kleine Zeit mitwirkende, und beobachte (und Teilnahme an) git Mailing-Liste. Ich weiß, Mercurial und Bazaar nur aus ihrer Dokumentation, verschiedenen Diskussionen über IRC und Mailinglisten, und Blog-Posts und Artikel Vergleich verschiedeneVersionskontrollsysteme (einige davon sind auf dem GitComparison Seite auf Git Wiki).

Mercurial und Bazaar ähneln sich auf der Oberfläche sehr. Beide bieten grundlegende verteilte Versionskontrolle, wie im Offline-commit und Zusammenführen mehrerer Zweige, die beide in Python geschrieben und sind sowohl langsamer als git. Es gibt viele Unterschiede, wenn Sie in den Code einzutauchen, aber für Ihre Routine von Tag zu Tag Aufgaben sind sie effektiv das gleiche, obwohl Mercurial ein bisschen mehr Schwung zu haben scheint.

Git, na ja, ist nicht für die Uneingeweihten. Es ist viel schneller als beide Mercurial und Bazaar, und wurde geschrieben, um den Linux-Kernel zu verwalten. Es ist die schnellste der drei und es ist auch der stärkste der drei, von einer ganz Marge. Git-Log und begehen Manipulation sind unerreicht. Es ist jedoch auch die komplizierteste und am gefährlichsten zu verwenden. Es ist sehr einfach, ein Commit oder ein Repository zu verlieren ruinieren, vor allem wenn man das Innenleben von git nicht verstehen.

Werfen Sie einen Blick auf dem Vergleich vor kurzem von dem Python-Entwickler gemacht: http: //wiki.python. org / moin / DvcsComparison . Sie wählten Mercurial basiert auf drei wichtige Gründe:

  

Die Wahl mit Mercurial zu gehen war für drei wichtige Gründe aus:

     
      
  • Laut einer kleinen Umfrage, Python-Entwickler sind mehr daran interessiert, sich mit der Mercurial   als in Bazaar oder Git.
  •   
  • wird Mercurial in Python geschrieben, die mit der Python-dev Tendenz zu 'essen ihr eigenes dogfood'.
  • kongruent   
  • Mercurial ist deutlich schneller als BZR (es ist langsamer als git, wenn auch von einem viel kleineren Unterschied).
  •   
  • Mercurial ist einfacher für SVN Benutzer als Bazaar zu lernen.
  •   
     

(von http://www.python.org/dev/peps/ pep-0374 / )

Sun hat eine Bewertung der git , Mercurial und Bazaar als Kandidat der Sun Teamware VCS für die Solaris-Code-Basis zu ersetzen. Ich fand es sehr interessant.

Ein sehr wichtiger fehlt , was in Basar ist cp. Sie können nicht mehr Dateien haben die gleiche Geschichte zu teilen, wie Sie in SVN haben, siehe zum Beispiel hier und hier . Wenn Sie nicht verwenden cp planen, BZR ist ein großer (und sehr einfach zu bedienen) Ersatz für SVN.

Ich war Bazaar mit für eine Weile, die ich sehr mochte, aber es war nur kleinere Projekte und selbst dann war es ziemlich langsam. So einfach zu erlernen, aber nicht super schnell. Es ist sehr x-Plattform though.

Ich verwende derzeit Git, die ich sehr mag, da Version 1.6 es viel ähnlicher andere VCS in Bezug auf die Befehle zu verwenden.

Ich denke, die wichtigsten Unterschiede für meine Erfahrung im Umgang mit DVCS ist dies:

  1. Git hat die lebhafteste Gemeinschaft und es ist üblich, Artikel über Git zu sehen
  2. GitHub rockt. Launchpad.net ist in Ordnung, aber nichts, wie die Freude an der Github
  3. Die Anzahl der Workflow-Tools für Git war großartig. Es ist alles über den Ort integriert. Es gibt einige für Bzr aber nicht annähernd so viele oder so gut gepflegt.

Insgesamt Bzr war groß, als ich meine Zähne auf DVCS schneiden, aber ich bin jetzt sehr glücklich mit Git und Github.

Dies ist eine große Frage, die eine Menge auf Kontext abhängt, die Sie viel Zeit in eine dieser kleinen Textfelder eingeben nehmen würde. Auch alle drei davon im Wesentlichen ähnlich erscheinen, wenn für die üblichen Sachen verwenden die meisten Programmierer tun, so dass auch die Unterschiede zu verstehen, einig ziemlich esoterisches Wissen erfordert.

Sie werden wahrscheinlich viel bessere Antworten bekommen, wenn Sie Ihre Analyse dieser Tools auf den Punkt brechen, an dem Sie spezifischere Fragen haben.

Basar ist IMHO leichter als git zu lernen. Git hat eine schöne Unterstützung in github.com.

Ich glaube, Sie sollten versuchen, beide zu verwenden und entscheiden, welche Ihnen am besten geeignet.

  

Was Leute hier zu sehen, wie die relativen Stärken und Schwächen der Git, Mercurial tun, und Bazaar?

Dies ist eine sehr offene Frage, auf flamebait grenzt.

Git ist am schnellsten, aber alle drei sind schnell genug. Bazaar ist die flexibelste (es hat transparente Lese-Schreib-Unterstützung für SVN-Repositories) und kümmert sich viel über die User Experience. Mercurial ist irgendwo in der Mitte.

Alle drei Systeme haben viele Fanboys. Ich persönlich bin ein Bazaar fanboy.

  

In jeden von ihnen untereinander und gegen Versionskontrollsysteme wie SVN und Perforce unter Berücksichtigung, welche Probleme in Betracht gezogen werden sollte?

Die ersteren sind verteilte Systeme. Letztere sind zentralisierte Systeme. Darüber hinaus ist Perforce proprietäre während alle anderen frei wie in Rede rel="nofollow.

zentrale versus dezentrale ist ein viel größerer Tragweite Wahl als eines der Systeme Sie innerhalb seiner Kategorie genannt.

  

In einer Migration von SVN auf eine dieser verteilten Versionskontrollsysteme planen, welche Faktoren würden Sie in Betracht ziehen?

Erstens, das Fehlen eines guten Ersatz für TortoiseSVN. Obwohl Bazaar arbeitet an ihrer eigenen Tortoise Variante , aber es ist noch nicht da, ab September 2008.

Dann das Training der Schlüsselpersonen, wie ein dezentrales System wird ihre Arbeit beeinflussen.

Schließlich Integration mit dem Rest des Systems, wie Issue Tracker, der nächtlichen Build-System, das automatisierte Testsystem, etc.

Ihr großes Problem sein wird, dass diese Distributed SCMs, und als solche erfordern ein wenig eine Änderung der Einstellung des Benutzers. Sobald die Menschen auf die Idee, werden die technischen Details und Nutzungsmuster zu gewöhnen fallen an ihrem Platz, aber nicht zu unterschätzen, dass die erste Hürde, vor allem in einer Unternehmensumgebung. Denken Sie daran, alle Probleme sind Menschen Probleme.

ddaa.myopenid.com erwähnt sie beiläufig, aber ich denke, es lohnt sich zu erwähnen wieder: Bazaar kann remote SVN-Repositories lesen und schreiben. Das heißt, Sie Bazaar lokal als Proof-of-Concept verwenden könnten, während der Rest des Teams ist Subversion noch verwendet wird.

EDIT: So ziemlich das ganze Werkzeug hat jetzt einig Weg mit SVN in Wechselwirkung zu treten, aber ich habe jetzt persönliche Erfahrung, die Werke git svn extrem gut. Ich habe es seit Monaten verwendet, mit minimalem Schluckauf.

Es gibt gutes Video von Linus Torvalds auf git. Er ist Schöpfer von Git so das ist, was er fördert aber in dem Video, das er erklären, was verteilt SCMs sind und warum sie besser sind dann Zentralisierte. Es ist ein guter Deal git des Vergleichens (Mercurial betrachtet in Ordnung zu sein) und cvs / svn / notgedrungen. Es gibt auch Fragen aus dem Publikum in Bezug auf Migration auf verteilte SCM.

Ich fand dieses Material aufschlussreich und ich bin zu verteilten SCM verkauft. Aber trotz Linus Bemühungen meiner Wahl ist Mercurial. Der Grund dafür ist bitbucket.org, fand ich es besser (großzügigere) dann Github.

Ich brauche hier ein Wort der Warnung zu sagen: Linus recht aggressiven Stil hat, ich glaube, er will lustig sein, aber ich lachte nicht. Abgesehen davon, dass das Video ist toll, wenn Sie verteilte SCMs neu sind und denken über Wechsel von SVN.

http://www.youtube.com/watch?v=4XpnKHJAok8

Verteilte Versionskontrollsysteme (DVCSs) lösen verschiedene Probleme als Zentrale VCS. Vergleicht man sie ist wie Hämmer und Schraubenzieher zu vergleichen.

Zentrale VCS Systeme mit der Absicht entworfen werden, dass es eine wahre Quelle ist, dass ist Blessed und daher gut. Alle Entwickler arbeiten (Kasse) aus dieser Quelle, und fügen Sie dann (Commit) ihre Änderungen, die dann ähnlich Blessed werden. Der einzige wirkliche Unterschied zwischen CVS, Subversion, Clearcase, Perforce, VisualSourceSafe und alle anderen CVCSes ist im Workflow, Leistung und Integration, dass jedes Produkt anbietet.

Verteilte VCS Systeme werden mit der Absicht, dass ein Repository ist so gut wie jeder andere und dass von einem Repository in eine andere übergeht, sind nur eine andere Form der Kommunikation. Alle semantische Wert als auf den Repository vertrauenswürdig ist von außen durch Verfahren auferlegt wird, nicht von der Software selbst.

Die eigentliche Wahl einer Art oder die andere zwischen der Verwendung ist organisatorisch - wenn Ihr Projekt oder eine Organisation der zentrale Kontrolle will, dann ein DVCS ist ein Rohrkrepierer. Wenn Ihre Entwickler zu erwarten sind im ganzen Land / Welt arbeiten, ohne sichere Breitband-Verbindungen zu einem zentralen Repository, dann DVCS ist wahrscheinlich die Rettung. Wenn Sie beide benötigen, sind Sie fsck'd.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top