2012-05-28 6 views
6

Meine Frage ist allgemeiner als im Titel angegeben.Wie Revisionskontrollsystem die Revision wiederherstellt?

Ich weiß, dass Quelle Versionskontrolle Informationen nur über Unterschiede speichert. Wie ich verstehe, tut Wikipedia auch, und so tut Github.

Aber sie alle haben die Fähigkeit, ganze Datei mit bestimmten Revision zu zeigen. Werden sie inkrementell von der ersten Revision in eine bestimmte Version wiederhergestellt?

Und noch eine Frage. Wenn sie nur Unterschiede speichern, wie zeigen sie sie in ui mit Kontext (kleiner Text vor und nach Änderungen).

EDIT: Github speichert ganze Schnappschüsse statt Deltas

Antwort

6

Ich weiß, dass Quelle Versionskontrolle speichert Informationen nur über die Unterschiede.

Da die Frage Git design decision on storing content rather than differences zeigt, ist dies nicht genau was Git tut.
Es hat jedoch "gepackte" Format, um Objekte in deltaförmiger Form zu speichern, mit Binärdelta von LibXDiff-Bibliothek. Aber das wird hauptsächlich für den Netzwerktransfer verwendet.
Siehe "Is the git binary diff algorithm (delta storage) standardized?".
Deshalb ist Git "resolving delta" wenn Sie holen.

4

Für eine sehr interessante Lektüre über die Vor- und Nachteile der verschiedenen Arten der Speicherung von Versionskontrolldaten empfehle ich Eric Sinks Artikel Time and Space Tradeoffs in Version Control Storage zu lesen.

Speicher ist eine der schwierigsten Herausforderungen für eine Versionskontrolle System. Für jede Datei müssen wir jede Version speichern, die jemals existiert . Die logische Größe eines Versionsverwaltungsrepositorys wird nie verkleinert . Es wächst und wächst immer weiter, und jede alte Version muss verfügbar bleiben.

Also, was ist der beste Weg, um jede Version von allem zu speichern?

3

Wikipedia, leider ... hält jede einzelne Revision in der Datenbank in irgendeiner Form von XML (?) Als Text.

Werfen Sie einen Blick auf die wikipedia database schema. Insbesondere kürzliche Änderungen und Text.

Daher haben sie wunderbare O (1) Lookups auf die erste Kopie der "Biologie" Seite. Dies hat den unglücklichen Nebeneffekt, dass wikipedia technology cost von $ 8mil USD in 2010-2011 auf $ 12mil USD in 2011-2012 steigen wird. Dies ist trotz HDDs (und alles andere) billiger, nicht teurer.

So viel für die Revisionskontrolle von jeder Datei zu halten. Git nimmt einen netten Ansatz. Siehe Is the git storage model wasteful?.

Es speichert jede Datei, ähnlich wie oben beschrieben. Sobald der vom Repo eingenommene Platz ein bestimmtes Limit überschreitet, wird ein Brute-Force-Repack durchgeführt (es gibt eine Option, wie stark es versucht wird - --window = [N], --depth = [N]), was Stunden dauern kann.Es verwendet eine Kombination aus delta und verlustfreier Komprimierung für das besagte Umpacken (rekursiv Delta, dann wenden Sie verlustfrei auf welche Bits Sie auch haben).

Andere wie SVN verwenden einfache Delta-Komprimierung. (aus dem Gedächtnis, dem du nicht vertrauen solltest).

Fußnote: Delta-Komprimierung speichert inkrementelle Änderungen. verlustfreie Komprimierung ist ziemlich ähnlich wie zip, rar, etc.