Frage

Was sind die Vor- und Nachteile bei der Verwendung von Zentrale gegen Distributed Version Control System (DVCS)? Haben Sie laufen in irgendwelche Probleme in DVCS und wie haben Sie schützen gegen diese Probleme? Halten Sie die Diskussion Werkzeug Agnostiker und flammend auf ein Minimum.

Für diejenigen fragen, was DVCS-Tools zur Verfügung stehen, ist hier eine Liste der bekanntesten frei / Open-Source-DVCSs:

War es hilfreich?

Lösung

meine Antwort zu einer anderen Frage :

  

Verteilte Versionskontrollsysteme   (DVCSs) löst verschiedene Probleme als   Zentralisierte VCSs. Vergleicht man sie   wie der Vergleich Hämmer und   Schraubendreher.

     

Zentrale VCS Systeme   mit der Absicht, dass es   Eine wahre Quelle, die Gesegnet ist, und   daher gut. Alle Entwickler arbeiten   (Kasse) von dieser Quelle, und dann   hinzufügen (Commit) ihre Änderungen, die dann   wird in ähnlicher Weise Seligen. Das einzige   wirklicher Unterschied zwischen CVS,   Subversion, Clearcase, Perforce,   VisualSourceSafe und all die anderen   CVCSes ist im Workflow,   Leistung und Integration, die jeweils   Produkt anbietet.

     

Verteilte VCS Systeme   mit der Absicht entworfen, dass man   Repository ist so gut wie jeder andere,   und verschmilzt von einem Repository   andere sind nur eine andere Form von   Kommunikation. Alle semantischen Wert als   , an die Repository vertrauenswürdig ist   wird von außen aufgezwungen, indem   Prozess, nicht durch die Software selbst.

     

Die eigentliche Wahl einer Art zwischen der Verwendung von   oder die andere organisatorische - wenn   Ihr Projekt oder eine Organisation will   die zentrale Steuerung, dann ein DVCS ist ein   Rohrkrepierer. Wenn Ihre Entwickler   erwartet alle über die Arbeit   Land / Welt, ohne sichere   Breitbandverbindungen an einem zentralen   Repository, dann ist DVCS wahrscheinlich Ihre   Heil. Wenn Sie beide benötigen, sind Sie   fsck'd.

Andere Tipps

  

Für diejenigen, die denken, verteilte Systeme nicht autoritative erlauben   Kopien bitte beachten Sie, dass es viele Orte, wo verteilt   Systeme maßgebliche Kopien haben, ist das perfekte Beispiel wahrscheinlich   Linus' Kernel-Baum. Sicher viele Leute ihre eigenen Bäume haben aber   fast alle von ihnen in Richtung Baum Linus fließen.

     

, das sagte ich zu denken, dass verwenden verteilte SCM waren nur nützlich für   viele Entwickler verschiedene Dinge zu tun, aber in letzter Zeit haben sich entschieden,   dass alles, was ein zentrales Repository kann eine verteilte man tun, tun können   besser.

     

Zum Beispiel, sagen, Sie sind ein Solo-Entwickler auf Ihrem eigenen Arbeits   Projekt. Ein zentrales Repository könnte eine offensichtliche Wahl sein, aber   dieses Szenario in Betracht ziehen. Sie sind von dem Netzzugang entfernt (auf einer Ebene,   in einem Park, usw.) und in Ihrem Projekt zu arbeiten. Sie haben Ihre lokale   Kopie, so können Sie arbeiten gut tun, aber Sie wirklich wollen, weil Sie begehen   hat eine Funktion beendet und will zu einem anderen bewegen, oder Sie gefunden   um einen Fehler zu beheben oder was auch immer. Der Punkt ist, dass mit einer zentralen repo   Sie am Ende entweder alle Änderungen zusammen Maischen und sie commiting   in einem nicht-logischen changeset oder Sie teilen Sie sie später manuell aus.

     

Mit einem verteilten Repo Sie auf Geschäftsreise gehen, wie üblich, begehen, bewegen auf,   wenn Sie den Netzzugang haben wieder schieben Sie Ihren „einen wahren Repo“ und   nichts geändert.

     

Nicht die andere nette Sache über verteilen repos zu erwähnen: Voll   Geschichte immer verfügbar. Sie müssen sich an die Revisionsprotokolle suchen, wenn   weg aus dem Netz? Sie müssen die Quelle zu annotieren um einen Fehler zu sehen, wie   wurde vorgestellt? Alle möglichen mit verteilten repos.

     

Bitte bitte nicht glauben, dass verteilte vs zentrale Begriff ist,   Eigentum oder maßgebliche Kopien oder so etwas. Die Realität   verteilt wird, ist der nächste Schritt in der Evolution von SCM.

Nicht wirklich ein Vergleich, aber hier sind, was große Projekte verwenden:

Zentrale VCSes

  • Subversion

    Apache, GCC, Ruby, MPlayer, Zope, Plone, Xiph, FreeBSD, WebKit, ...

  • CVS

    CVS

Distributed VCSes

  • git

    Linux-Kernel, KDE, Perl, Ruby on Rails, Android, Wein, Fedora, X.org, Mediawiki, Django, VLC, Mono, Gnome, Samba, CUPS, GnuPG, Emacs ELPA ...

  • Mercurial (hg)

    Mozilla und Mozdev, OpenJDK (Java), Opensolaris, ALSA, NTFS-3G, Dovecot, moin moin, mutt, PETSc, Octave, FEniCS, aptitude, Python, XEmacs, Xen, Vim, Xine ...

  • Bzr

    Emacs, Apt, Mailman, MySQL, Squid, ... auch in Ubuntu gefördert.

  • darcs

    ghc, Ion, xmonad, ... populär in Haskell Gemeinschaft.

  • fossil

    SQLite

W. Craig Trader sagte über DVCS und CVCS:

  

Wenn Sie beide benötigen, sind Sie fsck'd.

Ich würde nicht sagen, du bist fsck'd , wenn beide verwenden. Praktisch in der Regel Entwickler, die Tools DVCS verwenden versuchen, ihre Änderungen zu fusionieren (oder Pull-Anfragen senden) gegen eine zentrale Lage (in der Regel zu einem Release-Zweig in einer Release-Repository). Es besteht eine gewisse Ironie, mit Entwicklern, die DVCS verwenden, aber am Ende Stick mit einem zentralisierten Workflow, können Sie beginnen sich zu fragen, ob die verteilte Ansatz wirklich besser ist als Zentrale.

Es gibt einige Vorteile mit DVCS über einen CVCS:

  • Der Begriff eindeutig erkennbar Commits macht Patches zwischen Peers schmerzlos zu senden. D. h Sie machen den Patch als begehen, und mit anderen teilen Entwickler, die es brauchen. Später, wenn jeder will so zusammenfassen, dass insbesondere verpflichten erkannt und kann zwischen den Zweigen verglichen werden, weniger Chancen merge Konflikt mit. Entwickler neigen dazu, Patches miteinander durch USB-Stick oder E-Mail unabhängig von Versionierungstool Sie verwenden zu senden. Leider gibt es in der CVCS Fall, Versionskontrolle werden die Commits als seperate registrieren, zu erkennen, andernfalls, dass die Änderungen gleich sind, auf eine höhere Chance merge Konflikt führt.

  • können Sie haben lokale experimentelle Zweige (geklont Repositories können auch eine Niederlassung in Betracht gezogen werden), die Sie brauchen nicht auf andere zu zeigen. Das bedeutet, brechen Änderungen müssen nicht Entwickler beeinflussen, wenn Sie etwas stromaufwärts nicht gedrückt haben. In einem CVCS, wenn Sie noch einen Bruchwechsel haben, können Sie haben, offline zu arbeiten, bis es behoben haben und Sie die Änderungen bis dahin. Dieser Ansatz besiegt effektiv den Zweck Versionierung als Sicherheitsnetz verwenden, aber es ist ein notwendiges Übel in CVCS.

  • In der heutigen Welt, in der Regel Unternehmen mit Offshore-Entwickler arbeiten (oder wenn noch besser wollen sie von zu Hause aus arbeiten). Mit einem DVCS hilft, diese Art von Projekten, weil sie die Notwendigkeit einer zuverlässigen Netzwerkverbindung eliminiert, da jeder seine eigene Repo hat.

... und einige Nachteile, die in der Regel Abhilfen haben:

  • Wer hat die neueste Version hat? In einem CVCS hat der Stamm in der Regel die letzte Revision, aber in einem DVCS kann es nicht klar ersichtlich sein. Die Abhilfe ist Verhaltensregeln verwendet wird, dass die Entwickler in einem Projekt zu einer Einigung kommen, in dem gegen ihre Arbeit fusionieren Repo.

  • Pessimistische Sperren, das heißt eine Datei gesperrt wird, wenn ein Check-out zu machen, sind in der Regel wegen der Gleichzeitigkeit nicht möglich, die zwischen Repositories in DVCS passieren kann. Der Grund Dateisperrung besteht in der Versionskontrolle ist, weil die Entwickler merge Konflikte vermeiden wollen. Allerdings hat Verriegelungs den Nachteil Entwicklung verlangsamt als zwei Entwickler nach unten kann nicht gleichzeitig auf demselben Stück Code arbeiten, wie mit einem langen Transaktionsmodell und es ist nicht volle Beweis Garantie gegen merge Konflikte. Die einzige vernünftige Art und Weise unabhängig von der Versionskontrolle ist groß Merge Konflikte zu bekämpfen ist eine gute Code-Architektur haben (wie niedrige Kopplung eine hohe Kohäsion) und teilen Sie Ihre Arbeitsaufgaben, so dass sie eine geringe Auswirkung auf den Code haben (das ist leichter gesagt als getan) .

  • In der eigenen Projekten wäre es fatal, wenn das gesamte Repository öffentlich verfügbar wird. Umso mehr, wenn ein verärgerter oder böswillige Programmierer bekommen einen geklonten Repository halten. Der Quellcode Leckage ist eine starke Schmerzen für proprietäre Unternehmen. DVCS macht, diese Ebene einfach, wie Sie nur das Repository klonen müssen, während einige CM-Systeme (wie Clearcase) versucht, dass der Zugang zu beschränken. Doch meiner Meinung nach, wenn Sie eine ausreichende Menge an Dysfunktionalität in Ihrer Unternehmenskultur haben dann keine Versionskontrolle in der Welt werden Ihnen gegen Quellcode Leckage helfen.

Während meine Suche nach dem richtigen SCM, habe ich die folgenden Links von großer Hilfe zu sein:

      
  1. Bessere SCM Initiative: Vergleich . Vergleich von etwa 26 Versionskontrollsysteme.
  2.   
  3. Vergleich der Revisionskontrolle Software . Wikipedia-Artikel zu vergleichen etwa 38 Versionskontrollsysteme Themen wie technische Unterschiede abdeckt, Funktionen, Benutzerschnittstellen und vieles mehr.
  4.   
  5. verteilte Versionskontrollsysteme . Ein weiterer Vergleich, sondern konzentrierte sich hauptsächlich auf verteilten Systemen.

Zu einem gewissen Grad sind die beiden Regelungen gleichwertig:

  • Ein verteiltes VCS kann trivialerweise in einer zentralisierten Lösung emulieren, wenn Sie nur immer Ihre Änderungen an einigen benannten Upstream-Repository nach jedem lokalen drücken begehen.
  • Ein zentralisierte VCS wird nicht normalerweise in der Lage sein, ein so natürlich eine ganz verteilt zu emulieren, aber man kann etwas sehr ähnlich, wenn man so etwas wie steppen oben drauf. Quilt, wenn Sie nicht mit ihm vertraut sind, ist ein Werkzeug für die Verwaltung großer Mengen von Patches oben auf einigen Upstream-Projekt. Die Idee dabei ist, dass der DVCS begeht Befehl durch die Schaffung einen neuen Patch implementiert ist, und der Push-Befehl durch Begehen jeden ausstehenden Patch auf die zentralisierte VCS implementiert wird und dann die Patch-Dateien zu verwerfen. Das klingt ein wenig umständlich, aber in der Praxis funktioniert es eigentlich recht gut.

Having said that, es gibt ein paar Dinge, die traditionell DVCSes sehr gut tun und welche zentralisierteste VCSes machen ein bisschen ein Hash. Die wichtigste davon ist wahrscheinlich Verzweigung: ein DVCS wird es sehr einfach machen, das Repository zu verzweigen oder Zweige zusammenführen, die nicht mehr benötigt werden, und wird der Überblick über die Geschichte halten, während Sie dies tun. Es gibt keinen besonderen Grund, warum eine zentrale Regelung Schwierigkeiten damit haben würde, aber historisch scheint niemand so recht noch Recht bekommen zu haben. Ob das tatsächlich ein Problem für Sie hängt davon ab, wie du gehst, Entwicklung zu organisieren, aber für viele Menschen ist es eine wichtige Überlegung.

Der andere gesetzte Vorteil DVCSes ist, dass sie offline arbeiten. Ich habe nie wirklich viel für das hatte; Ich mache meistens Entwicklung entweder im Büro (so die Repository auf dem lokalen Netzwerk) oder zu Hause (so gibt es ADSL). Wenn Sie eine Menge von Entwicklung auf Laptops zu tun während der Fahrt dann könnte dies eher eine Überlegung für Sie sein.

Es gibt nicht wirklich sehr viele gotchas, die DVCSes spezifisch sind. Es gibt eine etwas stärkere Tendenz für die Menschen ruhig zu gehen, weil man ohne Druck begehen kann, und es ist leicht, die Dinge privat am Ende Polieren, aber abgesehen davon, dass wir nicht sehr viele Probleme hatten. Dies kann, weil wir eine bedeutende Anzahl von Open-Source-Entwickler haben, die in der Regel vertraut mit dem Patch-Handelsmodell der Entwicklung sind, aber eingehende Closed-Source-Entwickler scheint auch Dinge ziemlich schnell zu holen.

Verteilen VCS in vielerlei Hinsicht attraktiv ist, aber ein Nachteil, dass meine Firma wichtig sein wird, ist die Frage der Verwaltung von Nicht-mergable Dateien (in der Regel binär, beispielsweise Excel-Dokumente). Subversion beschäftigt sich mit dieser durch die „svn: needs-lock“ tragende Eigenschaft, die bedeutet, dass Sie eine Sperre für die Nicht-mergable Datei bekommen müssen, bevor Sie sie bearbeiten. Es funktioniert gut. Aber das Arbeitsablauf erfordert ein zentrales Repository-Modell, das auf das DVCS Konzept entgegengesetzt ist.

Wenn Sie also eine DVCS verwenden möchten, ist es für die Verwaltung von Dateien nicht wirklich geeignet ist, die nicht-mergable sind.

Ich habe jetzt Subversion seit vielen Jahren mit und ich war wirklich zufrieden.

Dann wird die GIT Summen begonnen und ich musste es einfach testen. Und für mich war das wichtigste Verkaufsargument Verzweigung. Oh Junge. Jetzt nicht brauche ich länger mein Repository zu reinigen, gehen Sie zurück ein paar Version oder eine der dummen Dinge, die ich tat, als Subversion verwenden. Alles ist billig in DVCS. Ich habe nur wenn fossile und git versucht, aber ich habe notgedrungen verwendet, CVS und Subversion und es sieht aus wie DVCS alle haben wirklich billig Verzweigung und Tagging. Müssen nicht mehr den gesamten Code auf eine Seite kopieren und damit Verschmelzung ist nur ein Kinderspiel.

Jeder DVCS kann Setup mit einem zentralen Server, aber was man bekommt, ist unter anderem

Sie können jede kleine Änderung checkin kann man so will, wie Linus sagt, wenn Sie mehr als einen Satz verwenden müssen, um zu beschreiben, was du gerade getan hast, machst du zu viel. Sie können ohne Ihre Art und Weise mit dem Code, Zweig, fusionieren, Klon und Test alle lokal jedermann haben verursacht riesige Menge an Daten zum Download bereit. Und Sie brauchen nur die letzten Änderungen in den zentralen Server zu drücken.

Und Sie können ohne Netzwerk arbeiten.

Also kurz gesagt, eine Versionskontrolle verwendet, ist immer eine gute Sache. Mit DVCS ist billiger (in KB und Bandbreite), und ich denke, dass es mehr Spaß zu benutzen ist.

Git zur Kasse: http://git-scm.com/
Zur Kasse Fossil: http://www.fossil-scm.org
Zur Kasse Mercurial: https://www.mercurial-scm.org

Jetzt kann ich nur DVCS-Systeme empfehlen, und man kann leicht einen zentralen Server verwendet

Das Hauptproblem (abgesehen von der offensichtlichen Bandbreite Ausgabe) ist Eigentum .

Das ist sicher sein zu verschiedenen (geografische) Website sind nicht auf dem gleichen Element arbeitet als die andere.

Im Idealfall ist das Werkzeug in der Lage, das Eigentum in eine Datei zuweisen, einen Zweig oder auch ein Repository.

Um die Kommentare zu dieser Antwort zu beantworten, wollen Sie wirklich das Werkzeug, Ihnen zu sagen, wer was besitzt, und und kommunizieren (per Telefon, Instant Messaging oder E-Mail) mit dem fernen Ort.
Wenn Sie keinen Eigentums Mechanismus haben ... Sie werden „kommunizieren“, aber oft zu spät,.) (D.h .: nach gleichzeitige Entwicklung auf einem identischen Satz von Dateien in der gleichen Branche getan zu haben Die begehen kann chaotisch)

Für mich ist dies eine weitere Diskussion über einen persönlichen Geschmack und es ist ziemlich schwierig, wirklich objektiv zu sein. Ich persönlich bevorzuge Mercurial über den anderen DVCS. Ich mag Haken in der gleichen Sprache zu schreiben, wie Mercurial und der kleineren Netzwerk-Overhead geschrieben wird - nur zu sagen einige meiner eigenen Gründe.

Jeder ist in diesen Tagen auf den fahrenden Zug, wie DVCSs überlegen sind, aber Craigs Kommentar ist wichtig. In einem DVCS hat jede Person, die die gesamte Geschichte der Branche. Wenn Sie mit einer Menge von binären Dateien arbeiten (beispielsweise Bilddateien oder FLA-Dateien) dies eine riesige Menge an Speicherplatz benötigt und man kann diffs nicht tun.

Ich habe das Gefühl, dass Mercurial (und andere DVCS) sind anspruchsvoller als die Zentralisierte. Zum Beispiel eine Niederlassung in Mercurial Fusion hält die komplette Geschichte der Branche, während in SVN Sie auf das Branchenverzeichnis gehen, die Geschichte zu sehen.

Ein weiteres Plus für verteilte SCM auch in Solo-Entwickler Szenario ist, wenn Sie, wie viele von uns gibt, haben mehr als eine Maschine, die Sie arbeiten.

Nehmen wir an Sie eine Reihe von gemeinsamen Skripte haben. Wenn jede Maschine, die Sie auf Arbeit hat einen Klon Sie auf Anfrage aktualisieren und Ihre Skripte ändern. Es gibt Ihnen:

  1. eine Zeitersparnis, vor allem mit SSH-Schlüssel
  2. eine Art und Weise verzweigen Unterschiede zwischen verschiedenen Systemen (zum Beispiel Red Hat vs Debian, BSD vs Linux, etc.)

W. Craig Trader Antwort fasst die meisten davon jedoch finde ich, dass persönlichen Arbeitsstil als auch einen großen Unterschied macht. Wo ich zur Zeit arbeiten wir Subversion als unsere One True Quelle verwenden, jedoch verwenden viele Entwickler git-svn auf ihre persönlichen Maschinen für die Workflow-Problem zu kompensieren, haben wir (Versagen des Managements, aber das ist eine andere Geschichte). Auf jeden Fall. es ist wirklich über die Balance zwischen welchen Feature-Sets mit Ihnen produktivsten machen, was die Organisation braucht (zentrale Authentifizierung, zum Beispiel).

Ein zentralisiertes System nicht unbedingt verhindern, dass Sie getrennte Zweige mit Entwicklung zu tun auf. Es muss nicht eine einzige originalgetreue Kopie der Code-Basis sein, sondern verschiedene Entwickler oder Teams verschiedene Branchen haben können, Legacy-Zweige etc existieren könnten.

Was es in der Regel bedeutet dies, dass das Repository zentral verwaltet wird -. Aber das ist in der Regel ein Vorteil in einem Unternehmen mit einer kompetenten IT-Abteilung, weil es bedeutet, dass es nur ein Ort zu sichern und nur an einem Ort zu verwalten Speicherung in

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