Subversion verfolgt Baumstrukturen, nicht nur Dateiinhalte. Dies ist einer der Hauptgründe, warum Subversion geschrieben wurde, um CVS zu ersetzen.
Für Sie als ehemaligen CVS-Benutzer bedeutet das:
Die Befehle svn add und svn
delete arbeiten nun auf Verzeichnissen wie auf
Dateien; ebenso svn copy und svn
move. Jedoch bewirken diese Befehle
keine sofortige Änderung im Projektarchiv.
Stattdessen werden die Objekte einfach zum Hinzufügen oder
Löschen „vorgemerkt“. Es findet keine Änderung
im Projektarchiv statt, bevor Sie svn
commit
aufrufen.
Verzeichnisse sind nicht mehr dumme Behälter, sondern
sie haben Versionsnummern wie Dateien. (Obwohl es genauer
ist, von „Verzeichnis foo/
in
Revision 5“ zu sprechen.)
Lassen Sie uns den letzten Punkt etwas genauer erörtern. Die Versionierung von Verzeichnissen ist ein ernstes Problem; da wir Arbeitskopien aus gemischten Revisionen zulassen möchten, gibt es einige Einschränkungen beim Ausreizen dieses Modells.
Vom theoretischen Standpunkt definieren wir „Revision
5 des Verzeichnisses foo
“ als eine
bestimmte Ansammlung von Verzeichniseinträgen und Eigenschaften.
Angenommen, wir beginnen nun damit, Dateien dem Verzeichnis
foo
hinzuzufügen und wegzunehmen und diese
Änderungen dann zu übergeben. Es wäre eine Lüge, zu behaupten,
dass wir immer noch Revision 5 von foo
hätten. Wenn wir allerdings die Revisionsnummer von
foo
nach der Übergabe erhöht hätten, wäre
das auch eine Lüge; es könnten noch weitere Änderungen an
foo
vorliegen, die wir aber nicht
mitbekommen haben, da wir noch nicht aktualisiert haben.
Subversion behandelt dieses Problem, indem es
stillschweigend übergebene Hinzufügungen sowie Löschungen im
.svn
-Bereich mitverfolgt. Wenn Sie
schließlich svn update
aufrufen, wird
alles in Bezug auf das Projektarchiv glattgezogen und die neue
Revisionsnummer des Verzeichnisses korrekt vergeben.
Daher kann erst nach einer Aktualisierung gesagt
werden, dass es eine „vollständige“
Verzeichnisrevision gibt. Meist wird Ihre
Arbeitskopie „unvollständige“ Verzeichnisrevisionen
enthalten.
Auf ähnliche Art ergibt sich ein Problem, wenn Sie versuchen, Eigenschafts-Änderungen an einem Verzeichnis zu übergeben. Normalerweise würde die Übergabe die lokale Revisionsnummer erhöhen, was jedoch eine Lüge wäre, da Hinzufügungen oder Löschungen vorhanden sein könnten, die das Verzeichnis noch nicht mitbekommen hat, da es nicht aktualisiert worden ist. Deshalb dürfen Sie Änderungen an Verzeichnis-Eigenschaften nicht übergeben, bevor Sie das Verzeichnis aktualisiert haben.
Für eine weitergehende Erörterung der Einschränkungen der Verzeichnisversionierung, siehe „Arbeitskopien mit gemischten Revisionen“.