Wie bereits erwähnt, besitzt jedes Verzeichnis einer
Subversion-Arbeitskopie ein besonderes Unterverzeichnis namens
.svn
, das Verwaltungsdaten zum
Arbeitskopieverzeichnis beherbergt. Subversion verwendet die
Informationen in .svn
, um Dinge wie diese
zu verfolgen:
welche Orte des Projektarchivs durch die Dateien und Unterverzeichnisse der Arbeitskopie repräsentiert werden
welche Revision jeder dieser Dateien und Verzeichnisse momentan in der Arbeitskopie vorhanden ist
irgendwelche benutzerdefinierten Eigenschaften, die diesen Dateien und Verzeichnissen zugewiesen sein könnten
ursprüngliche (unbearbeitete) Kopien der Dateien in der Arbeitskopie
Die Struktur sowie der Inhalt des Verwaltungsbereichs einer Subversion-Arbeitskopie werden als Implementationsdetails betrachtet, die nicht für menschliche Bearbeitung vorgesehen sind. Entwicklern wird nahegelegt, die öffentlichen APIs oder die von Subversion zur Verfügung gestellten Werkzeuge zu benutzen, um die Daten der Arbeitskopie zu bearbeiten, statt diese Dateien direkt zu lesen und zu verändern. Die von der Arbeitskopie-Bibliothek für ihre Verwaltungsdaten verwendeten Dateiformate ändern sich hin und wieder – eine Tatsache, die dem Durchschnittsbenutzer dank der öffentlichen APIs verborgen bleibt. Nur um Ihre unbändige Neugier zu stillen, werden wir in diesem Abschnitt einige dieser Implementierungsdetails offenlegen.
Die vielleicht wichtigste Datei im Verzeichnis
.svn
ist die Datei
entries
. Sie enthält den größten Teil der
Verwaltungsinformationen zu den versionierten Elementen in
einem Verzeichnis der Arbeitskopie. Diese eine Datei verfolgt
die Projektarchiv-URLs, die ursprüngliche Revision, Prüfsummen
von Dateien, ursprünglichen Text und Zeitstempel von
Eigenschaften, Informationen zur Ablaufkoordination und zu
Konfliktzuständen, Informationen zur letzten Übergabe (Autor,
Revision, Zeitstempel), die Geschichte der lokalen Kopie
– praktisch alles, was ein Subversion-Client über eine
versionierte (oder noch zu versionierende) Ressource wissen
möchte!
Kenner der Verwaltungsverzeichnisse von CVS werden zu
diesem Zeitpunkt bemerkt haben, dass die Datei
.svn/entries
von Subversion neben anderen
Dingen denselben Zweck verfolgt wie eine Vereinigung der
CVS-Dateien CVS/Entries
,
CVS/Root
und
CVS/Repository
.
Das Format der Datei .svn/entries
hat
sich im Laufe der Zeit geändert. Als ursprüngliche XML-Datei
verwendet sie nun ein angepasstes – doch immer noch
menschenlesbares – Dateiformat. Obwohl XML eine gute
Wahl für die ersten Entwickler von Subversion war, die
regelmäßig den Inhalt der Datei (und abhängig davon,
Subversions Verhalten) debuggen mussten, ist mittlerweile die
Notwendigkeit der Fehlersuche aus der frühen Entwicklungsphase
dem Wunsch der Benutzer nach einer flotteren Ausführung
gewichen. Ihnen sollte bewusst sein, dass die
Arbeitskopie-Bibliothek automatisch Arbeitskopien auf ein
neueres Format bringt – sie liest das alte Format und
schreibt das neue – was Ihnen einerseits die
Bereitstellung einer neuen Arbeitskopie erspart, andererseits
allerdings zu Komplikationen führen kann, falls verschiedene
Versionen von Subversion dieselbe Arbeitskopie verwenden
wollen.
Wie bereits erwähnt, enthält das Verzeichnis
.svn
auch die unveränderten Versionen
„textbasierter“ Dateien. Sie finden diese in
.svn/text-base
. Die Vorteile dieser
unveränderten Kopien sind vielfältig – Überprüfung
lokaler Änderungen und Vergleiche ohne Netzzugriff,
Wiederherstellung veränderter oder verlorengegangener Dateien
ohne Netzzugriff, effizientere Übertragung von Änderungen an
den Server — jedoch zu dem Preis, dass jede versionierte
Datei mindestens zweimal auf der Platte gespeichert wird.
Heutzutage scheint das jedoch für die meisten Dateien ein
vernachlässigbarer Nachteil zu sein. Jedoch sieht es nicht
mehr so schön aus, wenn die Größe Ihrer Dateien anwächst. Es
wird daher überlegt, die Anwesenheit der Datei
„text-base“ optional zu machen. Ironischerweise
jedoch wird das Vorhandensein von „text-base“ mit
dem Anwachsen der Größe Ihrer versionierten Dateien immer
ausschlaggebender — wer möchte schon eine riesige Datei
über das Netz versenden, obwohl nur eine winzige Änderung
übergeben werden soll?
Einen ähnlichen Zweck wie die
„text-base“-Dateien verfolgen die
Eigenschafts-Dateien und deren unveränderte Kopien
„prop-base“, die in
.svn/props
bzw.
.svn/prop-base
untergebracht sind. Da
selbst Verzeichnisse Eigenschaften haben können, gibt es auch die
Dateien .svn/dir-props
und
.svn/dir-prop-base
.