Ich habe das Subversion-Buch gelesen und es ist mir klar, dass Subversion nicht einzelne Dateien, sondern nur Deltas speichert, um Speicherplatz zu sparen. Subversion macht dasselbe auch mit Binärdateien (das war früher eine große Schwäche von CVS).Wie genau speichert Subversion Dateien im Repository?
Allerdings verstehe ich nicht den genauen Mechanismus. Wann begehe ich eine Datei, was passiert?
- Subversion speichert nur die diff (und hat bereits die alte Version)
- Subversion die vorherige Version löscht, speichert die neue Datei intakt und erzeugt eine umgekehrte diff, um „neu zu erstellen“, um die alte Version, wenn erforderlich.
- Etwas anderes, an das ich nicht gedacht habe.
Der erste Fall scheint am logischsten zu sein. Dies wirft jedoch eine andere Frage auf. Wenn ich in einem Subversion-Repository eine Datei mit 1000 Commits habe und ein neuer Entwickler eine saubere Kopie auscheckt, müsste Subversion die Originalversion (Initial Import) holen und 1000 diffs anwenden, bevor das Ergebnis zurückgegeben wird. Ist das richtig? Gibt es eine Art Caching für Dateien, in denen auch die neueste Version gespeichert wird?
Grundsätzlich wo finde ich Informationen zu den Interna des SVN-Repositorys?
Update: Anscheinend spielt das Backend der Subversion eine große Rolle. Zu der Zeit oder schreiben FSFS Option 1 verwendet, während BDB Option 2 verwendet. Danke msemack!
Minor Korrektur zu verstehen: „Spätere Versionen von Subversion auch das gleiche mit binären Dateien als auch“. Subversion hat dies IMMER getan (mindestens so weit zurück wie Version 0.3.x). –
möglich Duplikat von [SVN-Leistung nach vielen Revisionen] (http://stackoverflow.com/questions/127692/svn-performance-after-many-revisions) –
Ich finde das auch sehr verwirrend. Es gibt mehrere Backends, bdb und fsfs. Dann gibt es Dokumente über "bubble up", "hip-delta", die sich zu widersprechen scheinen. Wie speichert ein Standard-SVN Repo seine Dateien? – Thomas