Ich habe Git in meinen letzten beiden Unternehmen für die Versionskontrolle verwendet. Wie ich gehört habe, verwenden ungefähr 90% der Unternehmen Git gegenüber anderen Versionskontrollsystemen.
Eines der größten Verkaufsargumente von Git ist, dass es dezentralisiert ist, dh alle Repositorys sind gleich. Es gibt kein zentrales Repository / Quelle der Wahrheit. Dies war ein Feature, für das sich Linus Torvalds einsetzte .
Aber es scheint, dass jedes Unternehmen Git zentral verwendet, ähnlich wie man SVN oder CVS verwendet. Es gibt immer ein zentrales Repository auf einem Server (in der Regel auf GitHub), von dem die Benutzer abrufen und auf den sie pushen. Ich habe (nach meiner zugegebenermaßen eingeschränkten Erfahrung) noch nie jemanden gesehen oder gehört, der Git auf die wirklich dezentrale Art und Weise verwendet, wie es beabsichtigt war, dh indem er die Repositorys anderer Kollegen nach Belieben schob und zu diesen zog.
Meine Fragen sind:
- Warum verwenden die Leute in der Praxis keinen verteilten Workflow für Git?
- Ist das verteilte Arbeiten für die moderne Versionskontrolle überhaupt wichtig oder klingt es nur gut?
Bearbeiten
Mir wurde klar, dass ich in meiner ursprünglichen Frage nicht den richtigen Ton gefunden hatte. Es klang, als würde ich gefragt, warum jemand zentral arbeiten würde, wenn ein verteiltes Versionskontrollsystem (DVCS) so offensichtlich überlegen war. Eigentlich wollte ich sagen, dass ich für DVCS überhaupt keine Vorteile sehe . Dennoch höre ich oft Leute, die ihre Überlegenheit predigen, während die reale Welt meiner Ansicht zuzustimmen scheint.
quelle
Antworten:
Ahh, aber in der Tat Sie sind mit git in dezentral!
Vergleichen wir den Vorgänger von git in mindshare, svn. Subversion hatte nur ein "Repo", eine Quelle der Wahrheit. Wenn Sie ein Commit ausgeführt haben, war es ein einzelnes, zentrales Repo, zu dem sich auch jeder andere Entwickler verpflichtet hat.
Dies funktionierte, führte jedoch zu zahlreichen Problemen, wobei das größte der gefürchtete Zusammenführungskonflikt war . Es stellte sich heraus, dass diese Probleme von ärgerlich bis albtraumhaft zu lösen waren. Und mit einer Quelle der Wahrheit hatten sie die böse Angewohnheit, die Arbeit aller zum Stillstand zu bringen, bis sie gelöst waren. Zusammenführungskonflikte bestehen zwar mit git, sie sind jedoch keine arbeitsunterbrechenden Ereignisse und lassen sich viel einfacher und schneller lösen. Sie betreffen im Allgemeinen nur die Entwickler, die an den widersprüchlichen Änderungen beteiligt sind, und nicht alle.
Dann gibt es den ganzen Single-Point-of-Failure und die damit verbundenen Probleme. Wenn Ihr zentrales SVN-Repository irgendwie ausfällt, sind Sie alle geschraubt, bis es aus dem Backup wiederhergestellt werden kann, und wenn es keine Backups gab, sind Sie alle doppelt geschraubt. Aber wenn das "zentrale" Git-Repo ausfällt, können Sie es aus dem Backup oder sogar von einer der anderen Kopien des Repos wiederherstellen, die sich auf dem CI-Server, auf den Workstations der Entwickler usw. befinden. Sie können dies genau tun, weil sie verteilt sind. und jeder Entwickler hat eine erstklassige Kopie des Repos.
Auf der anderen Seite, da Ihre git Repo ist eine First-Class - Repo in seinem eigenen Recht, wenn Sie sich verpflichten, Ihre Commits zu Ihrem lokalen Repo gehen. Wenn Sie sie mit anderen teilen möchten oder an die zentrale Quelle der Wahrheit, müssen Sie dies explizit mit einem Push an eine Fernbedienung tun. Andere Entwickler können diese Änderungen dann abrufen, wenn es für sie bequem ist, anstatt svn ständig überprüfen zu müssen, um festzustellen, ob jemand etwas getan hat, das sie durcheinander bringt.
Die Tatsache, dass Sie Änderungen nicht direkt an andere Entwickler , sondern indirekt über ein anderes Remote-Repo übertragen, spielt keine große Rolle. Aus unserer Sicht ist es wichtig, dass Ihre lokale Kopie des Repos ein eigenständiges Repo ist. In svn wird die zentrale Quelle der Wahrheit durch das Design des Systems erzwungen. In Git hat das System nicht einmal dieses Konzept; Wenn es eine Quelle der Wahrheit gibt, wird dies extern entschieden.
quelle
svn up
mit dem Repo auf dem neuesten Stand sein müssen, bevor Sie einchecken können. Wenn andere weiterhin einchecken, während Sie versuchen, Zusammenführungskonflikte zu lösen, und Ihnen einen weiteren Satz von Zusammenführungskonflikten anbieten, können Sie dies entweder beenden oder du verlierst, was von deiner geistigen Gesundheit übrig ist.Wenn Ihr Build - Server (Sie sind mit CI, oder?) Ein Build erzeugt, wo sie zieht es aus? Sicher, ein Integrations-Build, von dem Sie argumentieren könnten, benötigt kein "One True Repo", aber sicherlich ein Distributions-Build (dh das, was Sie dem Kunden geben).
Mit anderen Worten: Fragmentierung. Wenn Sie ein Repo als "das" Repo bestimmen und Wächter ernennen, die Anfragen abrufen, haben Sie eine einfache Möglichkeit, die Anfrage "Gib mir einen Software-Build" oder "Ich bin neu im Team, wo ist der Code?" Zu erfüllen.
Die Stärke von DVCS ist weniger der Peer-to-Peer-Aspekt, sondern die Tatsache, dass es hierarchisch ist . Ich ändere meinen Arbeitsbereich und begebe mich dann zu lokal. Sobald ich eine Funktion abgeschlossen habe, füge ich meine Commits zusammen und schiebe sie auf meine Fernbedienung. Dann kann jeder meinen vorläufigen Code sehen, Feedback usw. geben, bevor ich eine Pull-Anfrage erstelle und ein Projektadministrator sie in das One True-Repo einbindet.
Mit herkömmlichem CVCS legen Sie entweder fest oder nicht. Für einige Workflows ist das in Ordnung (ich verwende beide VCS-Typen für verschiedene Projekte), für ein öffentliches Projekt oder ein OSS-Projekt ist das jedoch offensichtlich. Der Schlüssel ist, dass DVCS mehrere Schritte umfasst, die mehr Arbeit erfordern, aber eine bessere Möglichkeit bieten, Code von Fremden durch einen integrierten Prozess zu integrieren, der eine bessere Übersicht über das, was eingecheckt wird, ermöglicht. Wenn Sie es zentral verwenden, können Sie es dennoch Sie verfügen über den Goldstandard des aktuellen Projektstatus und bieten gleichzeitig einen besseren Mechanismus für die gemeinsame Nutzung von Code.
quelle
Ich weiß nicht , wie Sie „jeden“ definieren, aber mein Team hat „eine zentrale Repo auf einem Server“ und auch von Zeit zu Zeit , die wir von anderen Kollegen repos ziehen , ohne über diese zentrale Repo zu gehen. Wenn wir dies tun, gehen wir immer noch über einen Server, weil wir uns dafür entscheiden, keine Patches über den Ort per E-Mail zu versenden, sondern nicht über das zentrale Repository. Dies ist in der Regel der Fall, wenn eine Gruppe an einem bestimmten Feature zusammenarbeitet und auf dem neuesten Stand bleiben möchte, jedoch noch kein Interesse daran hat, das Feature für alle zu veröffentlichen. Da wir keine geheimen Siloarbeiter sind, halten diese Situationen natürlich nicht lange an, aber DVCS bietet die Flexibilität, das zu tun, was am bequemsten ist. Wir können einen Feature-Zweig veröffentlichen oder nicht, je nach Geschmack.
Aber in mehr als 90% der Fälle gehen wir sicher über das zentrale Repo. Wenn ich mich nicht für eine bestimmte Änderung oder die Arbeit eines bestimmten Kollegen interessiere, ist es bequemer und besser skalierbar, "alle Änderungen meiner Kollegen, die im zentralen Repo überprüft wurden" zu übernehmen, anstatt Änderungen von jedem von N separat abzurufen Kollegen. DVCS versucht nicht zu verhindern, dass "Pull from Main Repo" der häufigste Workflow ist, sondern, dass er der einzige verfügbare Workflow ist.
"Distributed" bedeutet, dass alle Repos in
git
Bezug auf die Software technisch gleichwertig sind , jedoch nicht, dass sie für Entwickler und unsere Workflows gleich wichtig sind. Wenn wir an Clients oder Produktionsserver freigeben, hat das Repo, das wir verwenden, eine andere Bedeutung als ein Repo, das nur von einem Entwickler auf seinem Laptop verwendet wird.Wenn „wirklich dezentrale“ bedeutet „gibt es keine spezielle repos“ , dann glaube ich nicht , das ist , was Linus bedeutet Meister, da er in der Tat nicht hält spezielle repos , die sind wichtiger in dem großen Plan der Dinge, als ist Ein zufälliger Klon von Linux, den ich gestern gemacht habe und der nur dazu verwendet werden soll, einen kleinen Patch zu entwickeln und ihn dann zu löschen, sobald er den Patch akzeptiert hat.
git
hat keinen Vorzug für sein Repo gegenüber meinem, aber Linus hat Vorzug dafür. Sein "ist der aktuelle Stand von Linux", meins nicht. Veränderungen neigen also natürlich dazudurch Linus gehen. Die Stärke von DVCS gegenüber zentralisiertem VCS ist nicht, dass es kein De-facto-Zentrum geben darf, sondern dass Änderungen kein Zentrum durchlaufen müssen, da (sofern Konflikte dies zulassen) jeder etwas zusammenführen kann.DVCS-Systeme sind auch gezwungen , da sie dezentralisiert sind, bestimmte praktische Funktionen bereitzustellen, die darauf beruhen, dass Sie unbedingt eine vollständige Historie (dh ein Repo) vor Ort haben müssen, um irgendetwas zu tun. Aber wenn Sie darüber nachdenken, gibt es keinen fundamentalen Grund, warum Sie ein zentrales VCS mit einem lokalen Cache nicht konfigurieren können, der den gesamten Verlauf für schreibgeschützte Vorgänge auf dem neuesten Stand hält. (Ich denke, Perforce hat eine Option für diesen Modus.) aber ich habe noch nie Perforce verwendet). Oder prinzipiell könntest du das
git
mit deinem konfigurieren.git/
Verzeichnis auf einem remote gemounteten Dateisystem, um die "Funktion" von SVN zu emulieren, die nicht funktioniert, wenn Sie keine Netzwerkverbindung haben. Tatsächlich erzwingt DVCS, dass die Rohrleitungen robuster sind, als Sie es in einem zentralen VCS können. Dies ist ein (sehr willkommener) Nebeneffekt und hat zur Motivation des DVCS-Designs beigetragen, aber diese Aufteilung der Verantwortung auf technischer Ebene ist nicht dasselbe wie die vollständige Dezentralisierung der gesamten menschlichen Verantwortung.quelle
Das Interessante an der Natur von DVCS ist, dass Sie es wahrscheinlich nicht wissen, wenn andere Leute es auf verteilte Weise verwenden, es sei denn, sie interagieren direkt mit Ihnen. Das Einzige, was Sie definitiv sagen können, ist, dass Sie und Ihre direkten Teamkollegen git nicht auf diese Weise verwenden. Dies erfordert keine unternehmensweite Richtlinie. Also werde ich dich fragen, warum benutzt du git nicht dezentral?
Um Ihre Bearbeitung zu bearbeiten, benötigen Sie möglicherweise einige Erfahrung in der Arbeit mit einer tatsächlichen zentralisierten Versionskontrolle, um die Unterschiede zu erkennen. Dies sind alles Dinge, die mein Team bei der Arbeit macht, als wir VCS zentralisiert hatten:
Auf die Gefahr, alt zu klingen, weil man es sagt, weiß man wirklich nicht, wie einfach man es hat.
quelle
Ich denke, deine Frage kommt von einer (verständlichen) immer verbundenen Denkweise. Das heißt, der zentrale "Wahrheit" -Ci-Server ist immer (oder fast immer) verfügbar. Während dies in den meisten Umgebungen zutrifft, habe ich in mindestens einer Umgebung gearbeitet, die weit davon entfernt war.
Ein Militärsimulationsprojekt, an dem mein Team vor einigen Jahren gearbeitet hat. Der gesamte Code (wir sprechen von einer Codebasis von> 1 Mrd. USD) musste (laut Gesetz / internationaler Vereinbarung, Männer in dunklen Anzügen, wenn Sie dies nicht tun) auf Computern installiert sein, die physisch von jeder Internetverbindung isoliert sind . Dies bedeutete die übliche Situation, dass wir jeweils 2 PCs hatten, einen zum Schreiben / Ausführen / Testen des Codes, den anderen für Google-Dinge, zum Überprüfen von E-Mails und dergleichen. Und im Team dieser Maschinen gab es ein lokales Netzwerk, das offensichtlich in keiner Weise mit dem Internet verbunden war.
Die "zentrale Quelle der Wahrheit" war eine Maschine auf einem Militärstützpunkt in einem unterirdischen fensterlosen Raum, der nur aus Aschenblöcken bestand (verstärktes Gebäude, Yada-Yada). Diese Maschine auch hatte keine Internetverbindung.
In regelmäßigen Abständen würde jemand die Aufgabe haben, eine (physische) Fahrt mit dem Git-Repo (das alle unsere Codeänderungen enthält) zur Militärbasis zu transportieren - die mehrere hundert Kilometer entfernt war, wie Sie sich vorstellen können.
Darüber hinaus in sehr großen Systemen, in denen Sie viele Teams haben. Sie haben in der Regel jeweils ein eigenes "zentrales" Repo, das dann auf das eigentliche (God Tier) "zentrale" zentrale Repo zurückgeht. Ich kenne mindestens 1 anderen Auftragnehmer, der das gleiche Festplatten-Repo-Programm auch mit seinem Code durchgeführt hat.
Außerdem, wenn Sie etwas in der Größenordnung des Linux-Kernels berücksichtigen ... Entwickler senden nicht einfach eine Pull-Anfrage an Linus. Es ist im Wesentlichen eine Hierarchie von Repos - von denen jedes für jemanden / ein Team "zentral" war / ist.
Die Trennung von Git bedeutet, dass es in Umgebungen verwendet werden kann, in denen Tools zur Quellcodeverwaltung für verbundene Modelle (z. B. SVN) nicht oder nicht so einfach verwendet werden können.
quelle
Letztendlich bauen Sie ein Produkt. Dieses Produkt repräsentiert Ihren Code zu einem bestimmten Zeitpunkt. Vor diesem Hintergrund muss Ihr Code irgendwo zusammenwachsen . Der natürliche Punkt ist ein ci-Server oder ein zentraler Server, auf dem das Produkt aufgebaut ist, und es ist sinnvoll, dass dieser zentrale Punkt ein Git-Repository ist.
quelle
Der verteilte Aspekt eines DVCS zeigt sich ständig in der Open-Source-Entwicklung in Form von Forking. Einige der Projekte, an denen ich mitarbeite, wurden vom ursprünglichen Autor aufgegeben und verfügen nun über eine Reihe von Abschnitten, bei denen die Betreuer manchmal bestimmte Funktionen voneinander abziehen. Sogar im Allgemeinen erhalten OSS-Projekte externe Beiträge über Pull-Requests, anstatt zufälligen Personen Push-Zugriff auf das Ground-Truth-Repo zu gewähren.
Dies ist kein alltäglicher Anwendungsfall, wenn ein konkretes Produkt mit einer bestimmten offiziellen Version erstellt wird. In der F / OSS-Welt ist dies jedoch die Norm und nicht die Ausnahme.
quelle
Wir haben uns nie getroffen, wie kommt es, dass Sie alle sagen? ;)
Zweitens gibt es weitere Funktionen, die Sie in Git, aber nicht in CVS oder SVN finden. Vielleicht nehmen Sie einfach an, dass dies die einzige Funktion für alle sein muss .
Sicher, dass viele Leute es zentral nutzen, wie CVS oder SVN. Vergessen Sie jedoch nicht die andere Funktion, die mit einem verteilten VCS einhergeht: Alle Kopien sind mehr oder weniger "vollständig" (alle Zweige und der vollständige Verlauf sind verfügbar), und alle Zweige können ausgecheckt werden, ohne eine Verbindung zu einem Server herzustellen.
Meiner Meinung nach ist dies ein weiteres Feature, das man nicht vergessen sollte.
Während Sie dies nicht mit Out-of-Box-CVS und SVN tun können, kann Git wie die vorherigen ohne Probleme zentral verwendet werden.
So kann ich meine Änderungen festschreiben, eventuell laufende Squash-Commits zusammenfassen und meine Arbeit dann auf den Hauptentwicklungszweig übertragen.
Weitere Funktionen, die bei Git standardmäßig zur Verfügung stehen:
Siehe auch diese drei Tabellen in Wikipedia - Vergleich der Versionskontrollsoftware :
Eigenschaften
Grundlegende Befehle
Erweiterte Befehle
Vielleicht ist die dezentrale Art nicht das einzige Merkmal, das die Leute dazu bringt, es zu benutzen.
Jeder, der zu einem größeren Projekt auf Bitbucked, GitHub usw. beiträgt oder dieses hostet, wird dies genau tun. Die Betreuer behalten das "Haupt" -Repository bei, ein Mitwirkender klont, schreibt fest und sendet dann eine Pull-Anfrage.
In Unternehmen, selbst bei kleinen Projekten oder Teams, ist ein verteilter Workflow eine Option, wenn sie entweder Module auslagern und nicht möchten, dass Externe die heiligen Entwicklungszweige ändern, ohne dass ihre Änderungen zuvor überprüft werden.
Wie immer: es kommt auf die Anforderungen an.
Verwenden Sie ein dezentrales VCS, wenn ein Punkt zutrifft:
git init .
versionieren, ohne dies aus der Ferne speichern oder ein dediziertes Repository einrichten zu müssen (insbesondere bei Git wäre dies nur ausreichend, um bereit zu sein, etwas zu versionieren).Es gibt noch ein paar mehr, aber vier sollten ausreichen.
Natürlich hört es sich gut an - für Anfänger.
quelle
svn init
irgendwann zugelegt?Flexibilität ist sowohl ein Fluch als auch ein Segen. Und da Git extrem flexibel ist, ist es für die typische Situation fast immer viel zu flexibel. Insbesondere sind die meisten Git-Projekte nicht Linux.
Infolgedessen besteht die kluge Entscheidung darin, bei der Implementierung von Git einen Teil dieser theoretischen Flexibilität zu entfernen. In der Theorie können Repositories beliebige Graphen bilden, in der Praxis ist die übliche Wahl ein Baum. Die Vorteile der Graphentheorie werden deutlich: In einem Baum von Repositorys teilen zwei beliebige Repositorys genau einen Vorfahren. In einer zufälligen Grafik existiert die Idee eines Vorfahren nicht einmal!
Ihr Git-Client verwendet jedoch mit ziemlicher Sicherheit das Modell "Single Ancestor". Diagramme, in denen Knoten einen einzelnen Vorfahren haben (mit Ausnahme eines Stammknotens), sind genau Bäume. Ihr Git-Client selbst verwendet daher standardmäßig das Baummodell und daher zentralisierte Repositorys.
quelle
Geschäftslogik belohnt einen zentralen Server. Für fast alle realistischen Geschäftsszenarien ist ein zentraler Server ein grundlegendes Merkmal des Workflows.
Nur weil Sie DVCS-fähig sind, muss Ihr primärer Arbeitsablauf nicht DVCS sein. Wenn ich git bei der Arbeit verwende, verwenden wir es zentral, mit Ausnahme der merkwürdigen Fälle, in denen das verteilte Bit für den reibungslosen Ablauf der Dinge unerlässlich war.
Die verteilte Seite der Dinge ist kompliziert. Normalerweise möchten Sie die Dinge glatt und einfach halten. Indem Sie git verwenden, stellen Sie jedoch sicher, dass Sie Zugriff auf die verteilte Seite haben, um mit den schwierigen Situationen fertig zu werden, die später auftreten können.
quelle
Damit ein Kollege aus einem Git-Repo auf meinem Computer zugreifen kann, muss ein Git-Daemon auf Stammebene als Hintergrundaufgabe ausgeführt werden. Ich bin sehr misstrauisch gegenüber Daemons, die auf meinem eigenen Computer oder auf meinem von der Firma bereitgestellten Laptop ausgeführt werden. Die einfachste Lösung ist "NEIN"! Damit ein Mitarbeiter aus einem Git-Repo auf meinem Computer zugreifen kann, muss auch meine Internetadresse festgelegt werden. Ich reise, arbeite von zu Hause aus und arbeite gelegentlich von meinem Büro aus.
Auf der anderen Seite dauert das VPN zur Unternehmens-Site und das Verschieben einer Filiale zum zentralen Repository weniger als eine Minute. Ich muss nicht einmal VPN einschalten, wenn ich im Büro bin. Meine Kollegen können leicht aus diesem Zweig ziehen.
In der dritten Hand ist mein lokales Git-Repository ein voll ausgestattetes Repository. Ich kann neue Arbeiten verrichten, einen neuen Zweig für experimentelle Arbeiten anlegen und die Arbeit wieder aufnehmen, wenn ich durcheinander bin, selbst wenn ich in einem Flugzeug arbeite, das in einer Höhe von 30.000 Fuß über dem Nirgendwo fliegt. Versuchen Sie dies mit einem zentralen Versionskontrollsystem.
quelle
Komplexität:
Bei einem zentralen Repository ist dies möglicherweise ein typischer Arbeitsablauf
Die Komplexität in Bezug auf die Anzahl der Entwickler in O (1).
Wenn stattdessen jeder Entwickler seinen eigenen Hauptzweig hat, wird für Entwickler 0:
Der Peer-to-Peer-Ansatz ist O (N).
Konsistenz:
Überlegen Sie nun, ob es einen Zusammenführungskonflikt zwischen Alices Hauptzweig und Bobs Hauptzweig gibt. Jeder der N Entwickler könnte den Konflikt anders lösen. Ergebnis: Chaos. Es gibt verschiedene Möglichkeiten, um eine eventuelle Konsistenz zu erreichen. Bis dahin kann jedoch jede Menge Entwicklerzeit verschwendet werden.
quelle
Einfach:
Unternehmen sind zentralisierte Organisationen mit zentralisiertem Workflow.
Jeder Programmierer hat einen Chef und er hat seinen Chef usw. bis zum CTO. CTO ist die ultimative Quelle der technischen Wahrheit. Welches Werkzeugunternehmen auch immer verwendet, es muss diese Befehlskette widerspiegeln. Eine Kompanie ist wie eine Armee - man darf nicht zulassen, dass Privatpersonen einen General überstimmen.
GIT bietet Funktionen, die für die Unternehmen nützlich sind (z. B. Anfragen zur Codeüberprüfung abrufen) und die sie dazu veranlassen, auf GIT zu wechseln. Der dezentrale Teil ist einfach eine Funktion, die sie nicht benötigen - sie ignorieren ihn also.
Um Ihre Frage zu beantworten: Der verteilte Teil ist in verteilten Umgebungen, z. B. Open Source, in der Tat überlegen. Die Ergebnisse variieren je nach Gesprächspartner. Linus Torvalds ist nicht gerade Ihre Kabinenratte, deshalb sind ihm andere Merkmale von GIT wichtig als für Ihr github-zentriertes Unternehmen.
quelle
Vielleicht liegt es daran, dass die Lohn- und Gehaltsabrechnung zentralisiert ist, sodass wir eine zentrale Person bei Laune halten müssen, wenn wir bezahlt werden möchten.
Vielleicht liegt es daran, dass wir ein einziges Produkt entwickeln. Daher benötigen wir eine Masterkopie der Software für die Kunden.
Vielleicht liegt es daran, dass es für einen Programmierer viel einfacher ist, an einen Ort zu gehen, um alle Änderungen abzurufen, als sich mit vielen verschiedenen Computern verbinden zu müssen.
Vielleicht liegt es daran, dass die Bugdatenbank zentralisiert ist und mit dem Code synchron gehalten werden muss .
Zentralisiert zu sein ist großartig, bis es ein Problem gibt ...
Da Git ein verteiltes System ist, kann aus jedem aktuellen Repository kostengünstig ein neues Center erstellt werden (stellen Sie das Repository einfach dem Netzwerk zur Verfügung). Mit Git kann auch eine veraltete Sicherung aus den Repositorys auf den Entwicklermaschinen aktualisiert werden, um die Wiederherstellung des Centers zu vereinfachen.
Das Zusammenführen usw. auf einer lokalen Kopie eines Repositorys bei ausgefallenem Netzwerk ist sehr gut, erfordert jedoch kein verteiltes System. Es wird lediglich ein System benötigt, das eine lokale Kopie aller Daten aufbewahrt. Ebenso beim Einchecken von Code beim Fliegen etc.
Am Ende des Tages gibt es wenig Kosten für die Verteilung und einige Vorteile. Der größte Teil der Vertriebskosten entfällt auf den Bereich, der benötigt wird, wenn Sie Filialen usw. nachverfolgen möchten. Wenn Sie ein System für die Verwendung in den meisten Unternehmen entwerfen, würden Sie es nicht für den Vertrieb als zentralisierte Steuerung des Quellcodes konzipieren ist eindeutig der primäre "Anwendungsfall".
quelle