Frage

lese ich das Subversion Buch, und es ist mir klar, dass Subversion einzelne Dateien nicht speichern, sondern nur Deltas, um Speicherplatz zu minimieren. Subversion hat auch das gleiche mit Binär-Dateien als auch (diese verwendeten eine große Schwäche von CVS zu sein).

Allerdings verstehe ich nicht, den genauen Mechanismus. Wenn ich begehen eine Datei, was passiert?

  1. Subversion speichert nur die diff (und hat bereits die alte Version)
  2. Subversion löscht die vorherige Version, speichert die neue Datei intakt und erzeugt eine umgekehrte diff, um „neu zu erstellen“, um die alte Version, wenn nötig.
  3. Etwas anderes, dass ich nicht gedacht haben.

Der erste Fall könnte die logischste zu sein scheint. Dies wirft jedoch eine andere Frage. Wenn ich in einem Subversion-Repository eine Datei mit 1000 Commits und einem neuen Entwickler checkt eine saubere Kopie haben, dann würde Subversion müssen die ursprüngliche Version (Anfangs Import) abzurufen und anzuwenden 1000 diffs auf diese, bevor das Ergebnis zurück. Ist das richtig? Gibt es irgendeine Art von Caching für Dateien, in denen die neueste Version auch gehalten wird?

Im Grunde genommen, wo kann ich Informationen über die SVN-Repository Interna finden?

Update: Anscheinend ist das Back-End der Subversion spielt eine große Rolle. Damals oder Schreiben von FSFS verwendet Option 1, während BDB verwendet Option 2. Dank msemack!

War es hilfreich?

Lösung

Da Subversion-Repository-Format vollständig intern ist, sind sie frei, die Darstellung von einer Revision zum nächsten zu ändern. Ich glaube, dass die aktuelle Revision der Regel speichert Reverse Deltas (Ihre Option 2), sondern auch speichert komplette Schnappschüsse in regelmäßigen Abständen, damit es nicht 1000 diffs zu lösen, bevor ein Ergebnis zurück.

Die Subversion 1.6 Release Notes hat einen Abschnitt Dateisystem-Speicher Verbesserungen dass hat einige Hinweise dazu, und Links zu anderen Quellen. Es genügt zu sagen, dass die Details von Subversion Datenspeicherung sind komplex und Änderungen vorbehalten.

Es gibt auch ein Design-Dokument in dem Subversion-Quellbaum, der die Verwendung von skip Deltas in Subversion . Im Allgemeinen ist die / notes / Verzeichnis enthält einige nützliche Dokumente in Bezug auf Subversion Interna .

Andere Tipps

Ich glaube, die folgende Verbindung der Unterstützung wäre die fsfs Architektur

zu verstehen

http://svn.apache.org/repos/ asf / subversion / trunk / subversion / libsvn_fs_fs / Struktur

Aus dem Subversion Entwurf Dokument ( die ganz datiert ist, obwohl) Sie dieses nicht erhalten:

  

Wie viele andere Versionskontrollsystemen, ändert Subversion speichert als Unterschiede. Es macht nicht vollständige Kopien von Knoten; stattdessen es die neueste Version als Volltext und frühere Versionen als eine Abfolge von Reverse-diffs speichert (das Wort „diff“ losen hier verwendet wird - für Dateien, bedeutet vdeltas, für Verzeichnisse, es bedeutet, ein Format, dass Änderungen zum Ausdruck bringt an Verzeichnisse).

Ich glaube nicht, dass da geändert.

Auch finden Sie unter Bubble-Up-Methode .

die regelmäßige FSFS Spezifikation könnte Ihnen helfen .

Oder wenn Sie Berkeley DB verwenden, hier die Spezifikation für die.

FSFS verwendet Reverse Deltas um die Änderungen zu speichern und skip- Deltas einige Aktionen zu beschleunigen, wenn ich alles richtig verstanden.

  

Jedes Mal, wenn Sie eine Änderung zu übernehmen, die   Repository speichert eine neue Revision   dass insgesamt Repository-Struktur und   Etiketten den neuen Baum mit einem neuen   Revisionsnummer. Natürlich, die meisten   der Baum ist das gleiche wie die Revision   vor, mit Ausnahme der Teile, die Sie   geändert.

     

Die neue Versionsnummer ist ein   sequentielles Schilds am gilt   gesamter neuer Baum, nicht nur auf die Dateien   und Verzeichnisse berührt Sie, dass   Revision. Allerdings umgangssprachlich, ein   Revisionsnummer wird verwendet, um zu bezeichnen,   die Änderung in dieser Revision verpflichtet;   zum Beispiel „die Änderung in r588“   ( „R588“ ist eine Abkürzung für „Revision   588" ) wirklich bedeutet, „den Unterschied   zwischen Repository Bäumen 587 und 588" ,   oder anders gesagt, „die Änderung vorgenommen   zu Baum 587 Baum 588" zu erzeugen.

Hier finden Sie: Subversion FAQ

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