2010-03-31 9 views
8

In einem DVCS hat jeder Entwickler ein gesamtes Repository auf seiner Arbeitsstation, auf dem sie alle ihre Änderungen festschreiben können. Dann können sie ihr Repo mit dem eines anderen zusammenführen, oder es klonen oder was auch immer (wie ich es verstehe, bin ich kein DVCS-Benutzer).Unterstützen verteilte Versionskontrollsysteme schlechte Backup-Gewohnheiten?

Für mich ist dies ein Nebeneffekt, der anfälliger für das Backup ist. In einem traditionellen zentralisierten System wissen sowohl Sie als Entwickler als auch die Verantwortlichen, dass, wenn Sie etwas festlegen, es auf einem zentralen Server gespeichert wird, der über anständige Backup-Lösungen verfügt.

Aber mit einem DVCS scheint es, Sie müssen nur Ihre Arbeit auf einen Server schieben, wenn Sie es teilen möchten. Es ist alles sehr gut, dass Sie das Repo lokal haben, so dass Sie einen Monat lang an Ihrem Feature-Zweig arbeiten können, ohne jemanden zu belästigen, aber es bedeutet (denke ich), dass das Einchecken Ihres Codes in das Repo nicht genug ist schiebt auf einen gesicherten Server.

Es bedeutet auch, dass ein Teamleiter nicht all diese netten SVN-Commit-E-Mails sehen kann, um eine ungefähre Vorstellung davon zu haben, was in der Code-Basis passiert?

Ist irgendetwas davon ein echtes Problem?

+0

Warum benötigen Sie eine Backup-Lösung? Sie haben bereits eine Kopie des Codes auf den Computern des Entwicklers. –

+3

Machst du? Sicherlich ist der springende Punkt, dass Sie Ihre Änderungen nur an jemand anderen weitergeben, wenn es fertig ist? Das könnte 2 Wochen Arbeit oder mehr sein, die nur auf Ihrem PC existiert. –

Antwort

2

ich kann Verstehen Sie Ihre Bedenken, dass Entwickler Backups vergessen, sobald ihr lokales Diff verschwunden ist (weil sie lokal committed haben) und sie nicht mehr mit reichlicher Ausgabe belästigen. Ich denke, die Lösung kann in besseren Werkzeugen, Moar-Werkzeugen liegen! Sie könnten einen Cron-Job in jeder Dev-Box einrichten, der jedes letzte erreichbare Objekt in seinem Repository zum zentralen Repo schiebt und sie im zentralen (gesicherten) Repo mit Namespaced-Zweigen beschriftet. Ich denke, dass "git push" dies tun kann, wenn man die korrekte Refspec befolgt. Dann beeinflusst alles, was Sie nicht tun, den Zustand Ihrer öffentlichen Zweige.

Aber brauchen Sie wirklich so aggressiv einen Backup-Prozess wie zuvor, als der Repo nur an einem Ort existierte? Mit einem DVCS benötigen Sie eine weitaus höhere Kategorie von Katastrophen, um Ihren gesamten Code zu verlieren. Sie brauchen jetzt einen Asteroiden oder eine Bombe, die Ihr Büro (und alle Ihre externen Teammitglieder) trifft, anstatt nur eine Festplatte oder einen RAID-Controller schlecht zu machen. Beachte, ich befürworte keine Schlamperei; Ich befürworte das gleiche Risiko zu geringeren Kosten.

+1

Das scheint mir genau falsch zu sein ....Unter der alten zentralisierten Version existierte der vollständige Source-Tree an vielen Stellen, da das Nutzungsmodell ziemlich viele regelmäßige Updates/Commits erfordert. Aber in dem verteilten Modell, wie John sagt, könnte es wochenlang Arbeit geben, die nur auf dem PC des Entwicklers verfügbar ist. – Clyde

+0

Ja, die Frage bezieht sich nicht darauf, eine zentrale Kopie mit _A_ gesichert zu haben. Es ist speziell über Arbeit, die lokal begangen aber nicht gedrängt wird - mit SVN/CVS wissen Sie, wenn Sie es verpflichten, wird es irgendwo anders als Ihr lokaler PC gespeichert –

+2

Unter alten zentralisierten Versionskontrollsystemen hatten Sie * nur * den vollständigen Quellbaum (und speziell , NICHT seine Geschichte) an vielen Orten. Mein erster Absatz befasst sich speziell mit dem Punkt, den Sie zu implizieren scheinen, ich ignoriere. –

0

Eine lokale Kopie des Repositorys könnte schlechte Backup-Gewohnheiten fördern, wenn man locker ist. Ihr Master-Repository sollte jedoch gesichert werden.

Die "lokale Kopie des gesamten Repository" ist viel wichtiger als eine Sicherung. Es reduziert die Latenzzeit bei der Untersuchung des Verlaufs der Codebasis - z. B. bei der Gegenüberstellung mit der neuesten Version - von einer Netzwerk-Rundreise zu einer Reise zu Ihrer lokalen Festplatte.

Das hört sich gar nicht so schlimm an, wenn sich Ihr Haupt-Repository auf Ihrem Gigabit-LAN ​​befindet. Wenn Sie ein Telearbeiter sind und das Repository über ein VPN gut 600+ ms entfernt ist, macht es einen Unterschied.

Ich habe mich nie damit befasst, aber ich bin mir sicher, dass sowohl Mercurial als auch Git Post-Commit-Hooks unterstützen, so dass Sie Commit-Mails für den Teamleiter einrichten können. Dann könnte jeder Entwickler sein Repository entsprechend einrichten oder ein Zwischenrepository haben, das halb gebackene Features mit den Commit-Mails oder was auch immer zulässt.

Edit: In Bezug auf John Kommentar über einen lang andauernden Versuch verloren, weil sie nicht bereit waren, an die Master-Repo zu begehen: Arbeit in einem separaten Zweig und regelmäßig Ihre Änderungen an den Master schieben. Sie haben immer noch alle Vorteile, gegen ein lokales Repository zu arbeiten (hauptsächlich für mich, sehr geringe Latenzzeiten), und ärgern Sie Ihre Kollegen immer noch nicht mit Ihrer unausgegorenen Funktion ... und Sie können Ihre Änderungen immer noch von Ihrem Computer aus speichern ein Ort, an dem Ihr Administrator das Repository ordnungsgemäß sichern kann.

+0

Wenn du auf einer langsamen Remoteverbindung bist, dann ist es für Diffs gut, aber ich würde es hassen, ein ganzes Repository auf diese Weise herunterzuladen! –

+0

Herunterladen einer gesamten Repository über eine langsame Verbindung ist ärgerlich, aber Sie müssen es nur einmal tun. Wenn Sie von zu Hause aus arbeiten, können Sie den großen Zug vor dem Duschen und Frühstück beginnen (oder am Vorabend schlafen, wenn es wirklich groß ist). Danach zieht und schiebt man nur kleine Diffs. – Wilka

+0

Warten Sie 30 Sekunden, nur damit Sie sehen können, welche Änderungen Sie gerade vorgenommen haben (CVS - ich weiß, dass SVN dies lokal ermöglicht), ist einfach zu irritierend zu ertragen. Aber selbst wenn Sie in Subversion etwas wissen möchten, das über Ihre gerade vorgenommenen Änderungen hinausgeht (zB wenn Sie herausfinden möchten, welcher Commit einen Fehler verursacht hat), erhalten Sie sofort einen Latenz-Treffer. Ich finde, dass Verzögerungen von nur 15 Sekunden ausreichen, um das Interesse am Warten zu verlieren, und am Ende vergesse ich meinen Platz, weil ich meine Post oder SO gelesen habe. –

1

Ich glaube nicht, dass Sie einen Automatismus haben. Verteilte oder zentralisierte VCS können mit Backup kombiniert werden (oder nicht). Es ist alles eine Frage der Disziplin im Team.

Gleiches gilt für Commit-E-Mails. Wenn das Team die Disziplin hat, regelmäßig Änderungen an den richtigen Repositories vorzunehmen, können Sie auch eine funktionierende Commit-Mailingliste haben.

Schlechte Angewohnheiten können auch in einem Team mit zentralisiertem VCS wachsen. Du musst immer schlechte Gewohnheiten bekämpfen.

0

In den meisten Orten stelle ich mir vor, dass es wahrscheinlich immer noch ein "zentrales" Repository gibt, aus dem Builds gemacht und getestet werden. Wenn Sie Ihren Code im Build haben wollen, muss er zentral gepackt werden.

Dies ist auch ein Management-Problem - sagen Sie Ihrem Team - Push regelmäßig (mindestens täglich), so dass Ihr Code gesichert wird. Wenn es nicht gemacht wird, dann hole den großen Stock raus.

Ich würde auch beachten, dass, wenn Sie auf der Suche auf die Commits angewiesen sind, um zu sehen, was Ihre Mitarbeiter tun, werden Sie wahrscheinlich einige größere Probleme, die Sie bei Adressierung aussehen könnte ...

+1

"Sagen Sie Ihrem Team - drücken Sie regelmäßig" ... ja, aber mein Punkt ist dies führt zu einer anderen Sache zu tun. Ein großer Stock ist gut und schön, aber je mehr man sich daran erinnert, desto mehr Chancen gibt es zu vermasseln. Wie der Entwickler, der glücklich in den Urlaub geht, hat er Code eingecheckt, vergisst aber, zu einem zentralen Repo zu wechseln. –

+0

"Sie haben wahrscheinlich größere Probleme" ... nun ja, aber besonders bei Remote-Teams ist es ein Weg, mehr "in Kontakt" zu halten, als nur mit Entwicklern darüber zu sprechen, was sie getan haben. Keine große Sache, nur ein kleines Niggel. –

+0

@John - Ich denke, Sie müssen in der Lage sein, Ihrem Entwicklerteam zu vertrauen, sobald es entsprechend geschult wurde. Der Typ, der in den Urlaub fährt, sollte bei seiner Rückkehr ausreichend peinlich sein, um dies wieder zu vermeiden. Ich denke, die Vorteile überwiegen die potenziellen Kosten. – Paddy