2008-09-16 7 views
13

Gibt es ein verteiltes Versionskontrollsystem (git, bazaar, mercurial, darcs usw.), das mit Dateien umgehen kann, die größer sind als das verfügbare RAM?Gibt es ein verteiltes VCS, das große Dateien verwalten kann?

Ich muss in der Lage sein, große Binärdateien (dh Datensätze, Quellvideo/Bilder, Archive) zu committen, aber ich muss nicht in der Lage sein, sie zu differieren, nur in der Lage sein, zu bestätigen und dann zu aktualisieren Änderungen.

Zuletzt habe ich mir das vor etwa einem Jahr angeschaut, und keiner der offensichtlichen Kandidaten hat das erlaubt, da sie alle so entworfen wurden, dass sie im Speicher nach Geschwindigkeit unterscheiden. Das ließ mich mit einem VCS für die Verwaltung von Code und etwas anderes ("Asset Management" -Software oder nur rsync und Skripte) für große Dateien, die ziemlich hässlich ist, wenn die Verzeichnisstrukturen der beiden überlappen.

Antwort

12

Es ist schon 3 Jahre seit ich diese Frage gestellt, sondern, wie der Version 2.0 Mercurial die largefiles extension enthält, das, was erreicht ich ursprünglich suchte:

Die largefiles extension ermöglicht das Tracking großer, inkompressibler Binärdateien in Mercurial, ohne dass eine übermäßige Bandbreite für Klone und Pulls erforderlich ist. Dateien, die als Largefiles hinzugefügt wurden, werden nicht direkt von Mercurial verfolgt. Ihre Revisionen werden vielmehr durch eine Prüfsumme identifiziert, und Mercurial verfolgt diese Prüfsummen. Auf diese Weise werden die großen Dateien in älteren Revisionen des Repositorys nicht benötigt, wenn Sie ein Repository klonen oder Changesets übernehmen. Es werden nur die Dateien heruntergeladen, die für die Aktualisierung auf die aktuelle Version erforderlich sind.Dies spart Speicherplatz und Bandbreite.

2

Ich denke, es wäre ineffizient, binäre Dateien in irgendeiner Form von Versionskontrollsystem zu speichern.

Die bessere Idee wäre, Metadaten-Textdateien im Repository zu speichern, die auf die binären Objekte verweisen.

+0

Vielen Dank für Ihre Antwort. Aber ja, ich meinte, was ich gefragt habe. Ich muss große Dateien versionieren - es gibt eine andere Klasse von Software "Enterprise Asset Management", die im Grunde VCS/Aperture/Version Cue auf einem Server für Media Assets ist. – joelhardi

+1

Ich denke, der Punkt, den ich versuchte (nicht genug Kaffee, fürchte ich), war, dass die Mehrheit der VCS-Systeme nicht für die Version binärer Objekte entwickelt wurde. Wie Sie sagen, machen sie In-Memory-Diffs und speichern das Delta ... Es hat wenig Sinn, Binaries zu versionieren, da sie intrinsisch sind. – pobk

0

Muss es verteilt werden? Angeblich ist die eine große Vorteil Subversion zu den neueren, verteilten VCSes seine überlegene Fähigkeit, mit Binärdateien umzugehen.

+0

Danke für die Antwort, aber ja, tut es. Ich stimme zu, dass SVN binäre Dateien gut verarbeitet - was ein Teil davon ist, was mich mystifiziert, dass die VCSs, die ich zuvor getestet habe, so getan haben, als ob das segfaulting auf einer 400 MB-Datei akzeptables Verhalten wäre. – joelhardi

10

Kein freies verteiltes Versionskontrollsystem unterstützt dies. Wenn Sie diese Funktion wünschen, müssen Sie sie implementieren.

Sie können git abschreiben: Sie interessieren sich für rohe Leistung für den Anwendungsfall Linux Kernel-Entwicklung. Es ist unwahrscheinlich, dass sie jemals den Performance-Kompromiss bei der Skalierung zu riesigen Binärdateien akzeptieren würden. Ich weiß nichts über Mercurial, aber sie scheinen ähnliche Entscheidungen getroffen zu haben wie git, indem sie ihr Betriebsmodell an ihr Speichermodell für die Leistung gekoppelt haben.

Im Prinzip sollte Bazaar in der Lage sein, Ihren Anwendungsfall mit einem Plugin zu unterstützen, das Tree/Branch/Repository-Formate implementiert, deren Speicher- und Implementierungsstrategie für Ihren Anwendungsfall optimiert ist. Falls die interne Architektur Sie blockiert und Sie nützlichen Code freigeben, erwarte ich, dass die Core-Entwickler die interne Architektur verbessern. Sie können auch einen Vertrag zur Feature-Entwicklung mit Canonical einrichten.

Der wohl pragmatische Ansatz, und zwar unabhängig von dem spezifischen DVCS wäre ein Hybridsystem zu bauen: implementieren eine Riesen-Datei zu speichern, und speichern Sie Verweise auf Blobs in diesem Laden in die DVCS Ihrer Wahl.

Volle Offenlegung: Ich bin ein ehemaliger Angestellter von Canonical und arbeitete eng mit den Basar-Entwicklern zusammen.

+0

Vielen Dank für die Antwort. Ich habe letztes Jahr mit einigen Hg- und BZR-Entwicklern korrespondiert, und was sie sagten, spiegelt Ihre Einschätzung wider - die BZR-Leute sagten: "Hm, das ist interessant, Sie könnten es kodieren" und wir dachten darüber nach, aber die Zeitkosten machten keinen Sinn mit SVN oder Hacking ... – joelhardi

+0

... bis einige hybride Lösung, wo wir Datei Hashes oder etwas begehen. Die DVCS-Projekte scheinen alle stark durch den verteilte FOSS-Entwicklungs-Anwendungsfall getrieben zu sein, im Gegensatz zu SVN und kommerziellen Produkten, die einen breiteren Einsatzbereich im Auge haben. Hg und BZR sind großartige Projekte, also schade für mich. – joelhardi

4

Ja, Plastic SCM. Es ist verteilt und es verwaltet riesige Dateien in Blöcken von 4 MB, so dass es nicht begrenzt ist, sie zu jeder Zeit vollständig in mem zu laden. Finden Sie ein Tutorial über DVCS hier: http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

+0

Vielen Dank für den Tipp, ich arbeite nicht mehr an diesem Problem, aber Ihre Antwort wird nützlich sein für Leute, die diesen Thread lesen. Von ihrer Website scheint es Linux/BSD/OS X-Unterstützung für Plastic SCM zu geben, da es C#/Mono ist. Sie verwenden SQL für den Backend-Speicher, aber ich bin immer noch skeptisch gegenüber der "großen Datei" -Support/Leistung ... mit der ich ursprünglich Dinge gemeint habe, die DV-Videoquellen im Bereich von 1-10 G entsprechen. Chunking/diffing so etwas aus SQLite * kann * funktionieren, aber wie gut? Wenn jemand Erfahrung damit hat, wäre es eine gute Information hinzuzufügen. – joelhardi

+0

Hallo, eigentlich führen wir gerade einen anderen Test mit 2Gb Dateien aus ... es geht um das Speichern von 4MB Blobs auf einer Datenbank, die ... extrem schnell ist ... mit SQL Server oder Firebird oder sogar MySQL ... Plastik hat eine Option zum Speichern von Dateien auf fs. – pablo

3

BUP könnte das sein, was Sie suchen. Es wurde als eine Erweiterung der Git-Funktionalität für Backups erstellt, aber das ist praktisch das Gleiche. Er zerlegt Dateien in Chunks und verwendet einen rollenden Hash, um den Dateiinhalt adressierbar zu machen/effizient zu speichern.

0

Ich kam zu dem Schluss, dass die beste Lösung in diesem Fall die ZFS zu verwenden sei.

Ja ZFS ist kein DVCS aber:

  • Sie Platz für Repository über die Schaffung neuer FS
  • zuordnen können Sie Änderungen durch die Schaffung von Snapshots verfolgen können
  • Sie Schnappschüsse senden können (verpflichtet) zu einem anderen ZFS-Datensatz
Verwandte Themen