Frage

Ich würde gerne hören, von Menschen, die mit der verteilten Versionskontrolle (aka distributed revision control, decentralized version control) und wie Sie das finden.Was verwenden Sie, Mercurial, Darcs, Git, Bazaar?Sind Sie immer noch mit es?Wenn Sie client/server-rcs in der Vergangenheit, werden Sie finden es besser, schlechter oder einfach nur anders?Was könnten Sie mir sagen würde, dass man mich auf den Zug aufspringen?Oder springen Sie für diese Angelegenheit, ich wäre daran interessiert zu hören, von Menschen mit negativen Erfahrungen als gut.

Ich bin derzeit auf der Suche, ersetzen Sie unseren aktuellen Versionskontrollsystem (Subversion), die den Anstoß für diese Frage.

Ich wäre vor allem daran interessiert, wer es mit co-Arbeiter in anderen Ländern, wo Ihre Maschinen kann nicht werden auf zur gleichen Zeit, und Ihre Verbindung ist sehr langsam.

Wenn Sie nicht sicher sind, welche verteilte Versionskontrolle ist, sind hier ein paar Artikel:

Einführung in die Verteilte Versionsverwaltung

Wikipedia-Eintrag

War es hilfreich?

Lösung

Ich habe mit Mercurial sowohl bei der Arbeit und in meine eigenen persönlichen Projekte, und ich bin wirklich glücklich mit ihm.Die Vorteile, die ich sehe, sind:

  1. Lokale Versionskontrolle. Manchmal arbeite ich an etwas, das will ich halten, eine version der Geschichte, aber ich bin nicht bereit, schieben Sie es auf die zentrale Repositorys.Mit verteilten VCS, ich kann nur Begehen auf meinem lokalen repo, bis es fertig ist, ohne Verzweigung.Auf diese Weise, wenn andere Personen änderungen vornehmen, die ich brauche, kann ich immer noch erhalten Sie Sie und integrieren Sie in meinem code.Wenn ich bereit bin, Schiebe ich es in die Server.
  2. Weniger merge-Konflikten. Sie immer noch geschehen, aber Sie scheinen weniger Häufig sein, und sind weniger riskant, weil der gesamte code wird überprüft, in meinem lokalen repo, also auch wenn ich pfusch der merge, kann ich immer zurück und es wieder tun.
  3. Separate repos als äste. Wenn ich haben ein paar der Entwicklung von Vektoren zur gleichen Zeit ausgeführt, ich kann nur dafür sorgen, dass mehrere Klone von meinem repo und zu entwickeln, jede Funktion unabhängig voneinander.Auf diese Weise, wenn etwas ruft verschrottet oder schlüpfte ich nicht haben, um ziehen Sie die Stücke aus.Wenn Sie sind bereit zu gehen, habe ich nur verschmelzen Sie zusammen.
  4. Geschwindigkeit. Mercurial ist viel schneller, mit zu arbeiten, vor allem, weil die meisten von Ihre gemeinsame Operationen sind lokal.

Natürlich, wie bei jedem neuen system gab es einige Schmerzen während der übergang.Sie haben zu denken, über die Versionskontrolle anders, als Sie es Taten, als Sie waren mit SVN, aber insgesamt ich denke, es ist sehr viel Wert.

Andere Tipps

An der Stelle, wo ich arbeite, haben wir beschlossen, sich zu bewegen von SVN, Bazaar (nach der Bewertung von git und mercurial).Basar war leicht zu beginnen, mit einfachen Befehlen (nicht so wie die 140 Befehle git hat)

Die Vorteile, die wir sehen können, ist die Fähigkeit zum erstellen von lokalen Niederlassungen und Arbeit auf es ohne die Haupt-version.Auch in der Lage, zu arbeiten, ohne Netzwerkzugriff zu tun diffs ist schneller.

Ein Befehl in bzr, die ich mag, ist der Regal-Erweiterung.Wenn Sie mit der Arbeit beginnen auf zwei logisch verschiedene Stücke von code in einer einzigen Datei und binden wollen, nur ein Stück, Sie verwenden können die Regal-Erweiterung zu wörtlich Regal die andere ändert sich das später.In Git können Sie das gleiche tun Sie mit dem spielen um in den index(staging-Bereich), aber bzr hat eine bessere Benutzeroberfläche für es.

Die meisten Menschen zögerten, sich zu bewegen, wie Sie es haben zwei Befehle commit und push (bzr ci + bzr push).Auch war es schwierig für Sie zu verstehen, das Konzept von branches und merging (kein verwendet man die Zweige oder verschmilzt Sie in svn).

Sobald Sie verstehen, dass, es wird erhöhen die Entwickler die Produktivität.Bis jeder versteht, dass es inkonsistent ist, Verhalten bei jeder.

An meinem Arbeitsplatz wechselten wir zu Git von CVS über zwei Monaten (die meisten meiner Erfahrung mit Subversion).Während es eine Lernkurve beteiligt vertraut zu machen mit dem verteilten system, die ich gefunden habe, Git, überlegen zu sein, in zwei wichtigen Bereichen:Flexibilität der Arbeits-Umgebung und Zusammenführen.

Ich nicht haben, um auf unsere VPN, oder auch über eine Netzwerkverbindung, um Zugriff auf die volle Versionierung.Dies bedeutet, ich kann Experimentieren Sie mit Ideen oder führen Sie große refactorings wo immer ich gerade bin, wenn der Drang Streiks, ohne sich zu erinnern, zu überprüfen, dass riesige verpflichten, die ich aufgebaut haben, oder die sich sorgen über nicht in der Lage ist, zurücksetzen, wenn ich ein Durcheinander machen.

Da verschmilzt durchgeführt werden client-Seite, Sie sind viel schneller und weniger fehleranfällig als die Einleitung eines server-Seite-Zusammenführen.

Mein Unternehmen nutzt derzeit Subversion, CVS, Mercurial und git.

Als wir begannen vor fünf Jahren wählten wir Lebensläufe und verwenden wir noch, dass in meiner Abteilung, unsere wichtigsten Entwicklungs-und release-Pflege Zweig.Jedoch, viele unserer Entwickler verwenden Mercurial individuell als ein Weg, um private Kontrollstellen, ohne den Schmerz von CVS-Filialen (und besonders Zusammenführen) und wir beginnen zu verwenden Mercurial für einige Zweige, die bis zu 5 Personen.Es gibt eine gute chance, dass wir endlich Graben CVS in ein weiteres Jahr.Unsere Verwendung von Mercurial ist organisch gewachsen;einige Menschen, die noch nie selbst berühren, denn Sie sind glücklich mit CVS.Jeder, der versucht hat, Mercurial endete, glücklich zu sein, ohne viel von einer Lernkurve.

Was funktioniert wirklich gut für uns Mercurial ist, dass unsere (Heim-gebraut) continuous integration-Server-monitor können Entwickler Mercurial-repositories sowie die Hauptstrecke.Also, die Menschen Begehen, Ihre repository, Holen Sie sich unsere continuous-integration-server zu überprüfen, und dann veröffentlichen Sie die änderungen.Wir unterstützen viele Plattformen, so dass es nicht möglich ist, zu tun, eine anständige level of manual checks.Ein weiterer Gewinn ist, dass verschmilzt oft einfach, und wenn Sie schwer sind, haben Sie die Informationen, die Sie benötigen, zu tun eine gute job auf Zusammenführen.Sobald jemand bekommt die zusammengeführte version zu arbeiten, Sie können drücken Sie Ihre merge die änderungen und dann die niemand sonst hat, wiederholen Sie den Aufwand.

Das größte Hindernis ist, dass Sie brauchen, um rewire-Ihre Entwickler-und Führungskräften-Gehirne so dass Sie Weg von der einzigen linearen branch-Modell.Die beste Medizin dafür ist eine Dosis von Linus Torvalds sagen, du bist dumm und hässlich wenn Sie zentrale SCM.Gute Geschichte Visualisierungs-tools helfen würde, aber ich bin noch nicht zufrieden mit dem, was verfügbar ist.

Mercurial und CVS beide funktionieren gut für uns Entwickler, die mit einer Mischung aus Windows -, Linux-und Solaris -, und ich habe bemerkt, keine Probleme mit Zeitzonen.(Wirklich, das ist nicht allzu schwer;verwenden Sie einfach Epoche Sekunden intern, und ich würde erwarten, dass alle großen SCM-Systeme erhalten dieses Recht).

Es war möglich, mit einem fairen Aufwand zu importieren unsere mainline-CVS-Geschichte in Mercurial.Es wäre einfacher gewesen, wenn die Menschen hatten nicht absichtlich eingeführt Ausnahmefällen, in unsere mainline-Lebensläufe-Geschichte als eine Methode zum testen der Geschichte-migration-tools.Diese enthalten Zusammenschluss einiger Mercurial Zweige in den CVS der Geschichte, so sieht das Projekt so wie es war, mit Hilfe von Tag eins an.

Unsere silicon design group wählte Subversion.Sie sind vor allem acht Zeitzonen entfernt von meinem Büro, und sogar über eine Recht gute Standleitung zwischen unseren Büros SUbversion-Check-out sind schmerzhaft, aber praktikabel.Ein großer Vorteil eines zentralen systems ist, dass Sie möglicherweise überprüfen große Binärdateien in (z.B.vendor releases), ohne dass alle verteilten repositories riesig.

Wir verwenden git für die Arbeit mit Linux kernel.Git wäre besser geeignet für uns, wenn Sie eine native Windows-version ist ausgereift, aber ich denke, die Mercurial-design so einfach und elegant, dass wir ' ll stick mit es.

Nicht verteilte Quellcodeverwaltung mich, aber vielleicht sind diese Fragen und Antworten geben Ihnen einige Einblicke:

I personnaly verwenden Mercurial source control system.Ich benutze es schon seit ein bisschen mehr als ein Jahr jetzt.Es war eigentlich meine erste Erfahrung mit VSC.

Ich habe versucht, Git, aber nie wirklich auf Sie geschoben, weil ich fand es war zu viel für das, was ich brauchte.Mercurial ist wirklich leicht zu erlernen, wenn Sie ein Subversion-Benutzer, da Sie teilt eine Menge von Befehlen, die mit es.Plus finde ich die Verwaltung meines repositories sehr einfach.

Ich haben 2 Möglichkeiten, zu teilen, meinen code mit Menschen:

  • Ich Teile mir einen server mit ein co-Arbeiter, und wir halten eine Haupt-repo für das Projekt.
  • Für einige OSS-Projekt arbeite ich an, wir erstellen patches von unserer Arbeit mit Mercurial (hg export) und die maintener von dem Projekt nur für Sie auf die repository (hg import)

Wirklich einfach, mit zu arbeiten, aber sehr kraftvoll.Aber im Allgemeinen, ist die Wahl eines VSC hängt wirklich davon ab, unser Projekt braucht...

Zurück, bevor wir abschalten der Sun-workstations für die Entwicklung eingebetteter Systeme wurden wir mit Sonne TeamWare Lösung.TeamWare ist eine vollständig Verteilung Lösung mit SCCS als die lokalen repository-Datei-revision-system und dann-Wrapper, mit einem Satz von Werkzeugen zu behandeln, die Verschmelzung Operationen (durchgeführt durch einen Zweig umbenennen) zurück an den zentralen Repositorys von denen gibt es viele.In der Tat, denn es ist verbreitet, es ist wirklich kein master-repository per se' (außer durch Konvention, wenn Sie es wollen) und alle Benutzer haben Ihre eigenen Kopien des gesamten source tree und Revisionen.Während der "put-back" - Operationen, die merge-tool mit 3-Wege-diffs algorithmisch Sortieren, was was ist, und ermöglicht Sie kombinieren die änderungen von unterschiedlichen Entwicklern, die sich angesammelt haben im Laufe der Zeit.

Nach der Umstellung auf Windows für unsere Entwicklung Plattform, landeten wir schalten zu AccuRev.Während AccuRev, weil es hängt auf einem zentralen server, ist nicht wirklich eine verteilte Lösung, die logisch aus einem workflow-Modell sehr nahe kommt.Wo TeamWare hätte völlig separate Kopien von allem, was auf jeden Kunden, darunter alle Revisionen von allen Dateien, die unter AccuRev diese werden in der zentralen Datenbank und den lokalen client-Rechnern nur noch die flat-file-aktuelle version der Dinge für die Bearbeitung vor Ort.Aber diese lokalen Kopien können versioniert werden durch die client-Verbindung zum server und verfolgt völlig separat von allen anderen änderungen (ie:die Zweige) implizit erstellt, die von anderen Entwicklern

Ich persönlich glaube, dass das verteilte Modell implementiert durch die TeamWare oder die Art hybrid-Modell implementiert durch die AccuRev überlegen ist vollständig zentralisierten Lösungen.Der Hauptgrund dafür ist, dass es keine Vorstellung von so checken Sie eine Datei oder eine Datei durch einen anderen Benutzer gesperrt.Auch, der Benutzer nicht erstellen oder definieren Sie die Zweige;die tools, die dies für Sie tun implizit.Bei größeren Mannschaften oder teams beitragen oder die Aufrechterhaltung einer Reihe von Quelldateien diese auflöst "tool generiert" sperren Verwandte Kollisionen und ermöglicht die code-änderungen abgestimmt werden mehr auf die Entwickler-Ebene, die letztlich zu koordinieren, änderungen sowieso.In einem Sinn, der verteilten Modell ermöglicht eine viel feinere "lock" anstatt der natürlich genarbten Verriegelung eingeleitet durch die zentrale Modelle.

Verwendet haben, darcs, an einem großen Projekt (GHC) und für viele kleine Projekte.Ich habe eine Liebe/Hass-Beziehung mit darcs.

Pluspunkte:unglaublich einfach einzurichten-repository.Sehr leicht zu bewegen um änderungen zwischen repositories.Sehr einfach zu Klonen und versuchen, "Zweige" in separate repositories.Sehr einfach zu machen "verpflichtet" in kleine zusammenhängende Gruppen, die Sinn macht.Sehr einfach zum umbenennen von Dateien und Kennungen an.

Nachteile:keine Ahnung von der Geschichte---Sie können nicht wiederherstellen "der Stand der Dinge am 5. August'.Ich habe nie wirklich herausgefunden, wie es zu benutzen, darcs, um zurück zu einer früheren version.

Deal-breaker:darcs nicht skalieren.Ich (und viele andere) haben, bekommen in große Schwierigkeiten mit GHC mit darcs.Ich habe es hängen mit 100% CPU-Auslastung für 9 Tage versucht zu ziehen 3 Monate im Wert von ändert.Ich hatte eine schlechte Erfahrung im letzten Sommer, wo ich verloren zwei Wochen versuchen, zu machen darcs-Funktion und schließlich Zuflucht, Wiedergabe alle meine änderungen von hand in eine unberührte repository.

Fazit:darcs ist großartig, wenn Sie wollen eine einfache, leichte Art und Weise zu halten, selbst zu Schießen selbst in den Fuß für Ihre hobby-Projekte.Aber auch mit einigen performance-Problemen angesprochen darcs 2, es ist noch nicht für die industrielle Stärke Zeug.Ich will nicht wirklich glauben, darcs, bis die gepriesenen 'Theorie des patches' ist etwas, das ein bisschen mehr als ein paar Gleichungen und einige schöne Bilder;Ich möchte, um zu sehen, eine wirkliche Theorie der Publikation in einer referierten Ort.Es ist vergangene Zeit.

Ich Liebe wirklich, Git, insbesondere mit GitHub.Es ist so schön, in der Lage, commit und roll back lokal.Und cherry-picking verschmilzt, während nicht trivial ist, ist nicht so furchtbar schwer, und weit Fortgeschrittener als alles, Svn oder CVS tun können.

Meine Gruppe bei der Arbeit mit Git, und es hat den ganzen Unterschied in der Welt.Wir waren mit SCCS und einem dampfenden Berg von csh-Skripts zum verwalten von ziemlich großen und komplizierten Projekten, die gemeinsamen code zwischen Ihnen (versucht,, jedenfalls).

Mit Git, submodule support macht viel von diesem Zeug einfach und nur ein minimum an scripting erforderlich ist.Unsere release-engineering-Aufwand gegangen, Weg, Weg nach unten, weil die äste sind leicht zu pflegen und zu verfolgen.Können Billig verzweigen und Zusammenführen lässt es wirklich relativ einfach zu pflegen, eine einzige Sammlung von Quellen über mehrere Projekte (Verträge), in der Erwägung, dass vor, jegliche Störung der typischen Fluss der Dinge war sehr, sehr teuer.Wir haben auch festgestellt, die scriptabability von Git zu sein riesige plus, weil wir können anpassen, sein Verhalten durch Haken oder durch scripts . git-sh-setup, und es scheint nicht, wie ein Haufen kludges wie vor.

Auch wir haben manchmal Situationen, in denen wir zur Wahrung unserer version control in distributed, nicht vernetzten Standorten (in diesem Fall getrennt secure labs), und Git hat Mechanismen für den Umgang mit dieser ganz reibungslos (bundles, die basic clone Mechanismus, formatiert Flecken, etc).

Einige von dies ist uns nur, Sie treten aus den frühen 80er Jahren und die Annahme einige moderne version Kontrollmechanismen, aber Git "war es Recht" in den meisten Bereichen.

Ich bin mir nicht sicher, ob der Umfang der Antwort, die Sie suchen, aber unsere Erfahrung mit Git, ist sehr, sehr positiv.

Die Verwendung von Subversion mit dem SourceForge-Server und andere Server über eine Reihe von verschiedenen verbindungen mit mittelgroßen teams und es funktioniert sehr gut.

Ich bin ein großer Befürworter der zentrale Quellcodeverwaltung für eine Menge von Gründen, aber ich wollte versuchen, BitKeeper für ein Projekt kurz vor.Vielleicht nach Jahren der Nutzung ein zentrales Modell in einem format oder einem anderen (Perforce, Subversion, CVS) ich habe gerade festgestellt, distributed source control schwer zu verwenden.

Ich bin die Vorstellung, dass unsere Werkzeuge sollten nie im Weg von der eigentlichen Arbeit;Sie sollten die Arbeit erleichtern.So, nach ein paar Kopf hämmerte Erfahrungen, die ich gerettet.Ich würde dazu raten, einige wirklich hardy-tests mit Ihrem team, bevor Sie rockt das Boot, da das Modell ist sehr anders als das, was die meisten Entwickler sind wahrscheinlich daran gewöhnt, im SCM-Welt.

Ich habe verwendet Basar für eine Weile jetzt, und lieben es.Trivial verzweigen und Zusammenführen zurück geben ein großes Vertrauen in die Verwendung von ästen, wie Sie verwendet werden sollten.(Ich weiß, dass zentrale vcs-tools ermöglichen sollte, aber die gebräuchlichsten, einschließlich subversion nicht erlauben, das einfach).

bzr unterstützt eine ganze Reihe von unterschiedlichen workflows von solo, durch die Arbeit als zentrale repository vollständig verteilt.Mit jeder Verzweigung (für einen Entwickler oder eine Funktion) zusammengeführt werden können, unabhängig, code-reviews kann getan werden, auf einer pro Zweig basis.

bzr hat auch ein großes plugin (bzr-svn) ermöglicht Ihnen die Arbeit mit subversion-repository.Sie können eine Kopie des svn-repo (die zunächst eine Weile dauert, als ruft es die gesamte Geschichte, die in Ihrem lokalen repo).Sie können dann Zweige für verschiedene Funktionen.Wenn Sie wollen zu tun eine schnelle Lösung für den Kofferraum, während die Hälfte Weg durch Ihre Funktion, Sie können machen eine zusätzliche Niederlassung, arbeiten in, dass, und dann fahren Sie zurück zum Stamm, so dass Ihr die Hälfte geschafft Funktion unberührt und außerhalb des Stammes.Wunderbar.Gegen die subversion wurde mein main verwenden so weit.

Hinweis: ich habe nur verwendet es auf Linux, und meist von der Befehlszeile aus, obwohl es gemeint ist, um gut zu funktionieren auf anderen Plattformen, hat GUIs wie TortoiseBZR und viel Arbeit wird auf die integration mit IDEs und wie.

Ich bin Herumspielen mit Mercurial für meine Projekte zu Hause.So weit, was ich mag über Sie ist, dass ich mehrere repositories.Wenn ich meinen laptop in die Kabine, ich habe noch version control, anders als wenn ich lief CVS zu Hause.Die Verzweigung ist so einfach wie hg clone und arbeiten auf dem Klon.

Die Verwendung Von Subversion

Subversion ist nicht verteilt, so dass macht mich denken, ich brauche einen wikipedia-link, falls die Menschen sich nicht sicher sind, wovon ich spreche :)

Wurde mit darcs 2.1.0 und seine große für meine Projekte.Einfach zu bedienen.Liebe, cherry picking ändert.

Ich verwende Git bei der Arbeit, zusammen mit einem meiner Mitarbeiter.Das Haupt-repository ist SVN, obwohl.Wir haben oft zu wechseln, workstations und Git macht es sehr einfach, ziehen Sie einfach die änderungen von einem lokalen repository auf einem anderen Rechner.Wenn wir arbeiten als team auf dem gleichen Merkmal, das Zusammenführen unserer Arbeit mühelos von der Hand.

Die git-svn bridge ist ein wenig wackelig, weil beim Einchecken in SVN-es umschreibt alle commits hinzufügen, um seine git-svn-id-Kommentar.Dies zerstört die schöne Geschichte der Zusammenführungen zwischen meine Mitarbeiter den repo-eine mine.Ich sage Voraus, dass wir uns nicht mit einem zentralen repository, wenn jeder teammember wäre mit Git.

Sie hat nicht gesagt, was os Sie entwickeln, aber Git hat den Nachteil, dass Sie die Befehlszeile verwenden, um alle Funktionen.Gitk ist eine nette gui zur Visualisierung der Zusammenführungs-Geschichte, aber die Verschmelzung selbst muss manuell gemacht werden.Git-Gui und der Visual Studio-plugins nicht, dass noch Poliert.

Wir verwenden distributed version control (Kunststoff-SCM) für multi-site und getrennte Szenarien.

1 - Multi-site:wenn Sie weit entfernte Gruppen, manchmal kann man sich nicht darauf verlassen, dass die internet-Verbindung, oder es ist nicht schnell genug, und verlangsamt die Entwickler.Dann haben unabhängige server, die synchronisiert werden können, zurück (Kunststoff repliziert Zweige hin und her) ist sehr nützlich, und die Dinge etwas beschleunigen.Es ist wahrscheinlich eines der häufigsten Szenarien für die Unternehmen, da die meisten von Ihnen sind immer noch besorgt "Total verteilt" - Verfahren, wo jeder Entwickler hat sein eigenes repository repliziert.

2 - Disconnected (oder wirklich verteilt, wenn Sie es vorziehen):jeder Entwickler hat sein eigenes repository, das repliziert wird hin und her mit seinen Kollegen oder die zentrale Lage.Es ist sehr bequem zu gehen zu einem Kunden oder gehen einfach nach Hause mit Ihrem laptop, und weiterhin in der Lage zu wechseln, Zweige, checkout und checkin-code, den Blick auf die Geschichte führen kommentiert und so weiter, ohne dass ein Zugriff auf der Fernbedienung "central" - server.Dann, wenn Sie zurück in das Büro, die Sie gerade replizieren Sie Ihre änderungen normalerweise Filialen) wieder zurück mit ein paar Klicks.

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