In meinem letzten Artikel Subversion mit WebDAV auf einem Ubuntu Server installieren habe ich euch ja gezeigt, wie man den Server für die Subversion Repositories aufsetzt. Nun geht es aber darum, wie man die Ordnerstruktur eines Projekts gestalten sollte. Wenn man hier von Anfang an auf ein paar Grundlegende Best-Practices achtet, dann erleichtert es einem später enorm die Arbeit mit dem Repository.
Die Grundlegenge Ordnerstruktur
Es gibt keine fest vorgegebene Struktur für ein Repository. Es hat sich aber eine Struktur herausgebildet, die von den meisten Projekten, die Subversion einsetzen benutzt wird. Diese wird auch in der SVN-Referenz (deutsche Übersetzung) beschrieben. Dazu werden im Hauptverzeichnis folgende drei Ordner erstellt:
/ trunk/ branches/ tags/
Solltet ihr mehrere Projekte in einem Repository verwalten, dann macht es Sinn für jeder eine solche Ordnerstruktur anzulegen:
/ projekt1/ trunk/ branches/ tags/ projekt2/ trunk/ branches/ tags/
Neues Repository mit dieser Ordnerstruktur erzeugen
Am besten erzeugen wir also gleich zu Beginn eines neuen Projekts eine solche Struktur. Gehen wir einfach mal von einem einfachen Repository mit nur einem Projekt aus. Ich möchte euch kurz die notwendigen Befehle aufzeigen um ein Repository für nur ein Projekt mit einer solchen Ordnerstruktur zu erzeugen.
Zuerst einmal erstellen wir in einem beliebigen Ordner ein neues Repository um dieses anschließend verwenden zu können:
svnadmin create /var/svn/public/myproject
Um nun die notwendigen Verzeichnisse zu erzeugen gibt es zwei Möglichkeiten:
- Auschecken des Repositories, erzeugen der Ordner und commit der Ordnerstruktur
- Direktes erzeugen der Ordner im Repository
Die erste Variante bietet sich an, wenn man gleich mehrere Projekte mit der Ordnerstruktur erzeugen möchte. Ich zeige euch hier kurz, welche Befehle dabei in Unix-Systemen notwendig wären:
cd ~ mkdir project cd project/ svn checkout https://kau-boys.de/svn/myproject cd myproject/ mkdir trunk tags branches
Jetzt müssen wir die Ordner zum Hinzufügen in das Repository markieren mit dem Befehl svn add
:
svn add trunk tags branches A trunk A tags A branches
Jetzt können wir diese Ordnerstruktur in das Repository commiten:
svn commit -m "Import der initialen Ordnerstruktur" Adding branches Adding tags Adding trunk Committed revision 1.
Die andere Möglichkeit ist wesentlich einfacher und erfordert nur einen einzigen Befehl. Dieser erzeugt die Ordnerstruktur direkt im Repository. Auch hier wäre es möglich die Ordner gleich für mehrere Projekte anzulegen (was ihr am besten mit mehreren Befehlen macht):
svn mkdir -m "Import der initialen Ordnerstruktur" file:///var/svn/myproject/trunk file:///var/svn/myproject/tags file:///var/svn/myproject/branches Committed revision 1.
Wie ihr seht ist diese Variante sehr viel einfacher. Gerade für den Administrator eines Repositories ist er praktischer. Man könnte den z.B. den gesamten Prozess zur Erzeugung eines Repositories und der Ordnerstruktur in einem Skript zusammenfassen, dass alle notwendigen Befehle automatisch hintereinander ausführt.
Das richtige Verzeichnis auschecken
Ganz wichtig ist es nun aber, dass ihr auch das richtige Verzeichnis benutzt um euer Projekt zu starten. Solltet ihr die Ordnerstruktur wie in der ersten Variante erzeugt haben, wechselt in eure Working Copy und benutzt dort den Befehl svn switch
um auf das trunk Verzeichnis zu wechseln:
cd ~/myproject svn switch https://kau-boys.de/svn/myproject/trunk D trunk D branches D tags
Wie ihr sehen könnt, wurden die Ordner gelöscht, da ihr euch nun „im Ordner trunk“ befindet. In diesem könnt ihr nun eure Dateien des Projekts commiten.
Wenn ihr die Ordnerstruktur wie in Variante 2 erzeugt habt, dann müsst ihr lediglich das richtige Verzeichnis auschecken. Gebt also direkt den trunk Ordner bei auschecken an:
cd ~ svn checkout https://kau-boys.de/svn/myproject/trunk myproject Checked out revision 1.
Damit der Ordner aber dabei nicht trunk heißt geben wir beim checkout Befehl gleich den Namen des Ordners an, den unser Projekt nachher haben soll, also in diesem Fall myproject.
Fazit
Ihr habt nun also gesehen, wie man eine gute Ordnerstruktur für Subversion-Projekte anlegt. Falls ihr euch aber fragt, wieso das so wichtig ist, dann seht euch mal Kapitel 4 der SVN-Referenz (deutsche Übersetzung) an. Ich mal bei einem Projekt zwar einen Ordner trunk erzeugt aber diesen als Root-Verzeichnis meines Repositories benutzt. Als ich dann (ca. 10000 Commits später) dann doch mal branches einsetzen wollte, bekam ich natürlich Probleme, da ich dann erst die Unterverzeichnisse erzeugt habe und alle anderen Order und Dateien per svn move
in den Ordner trunk verschieben musste. Dabei bleibt zwar die History aller Dateien erhalten, aber jeder Benutzer musste den Pfad zum Repository aktualisieren und dann in den neuen trunk Ordner wechseln.
Wenn ihr euch also schon immer zu Beginn eines neuen Projekts die Ordner erzeugt spart ihr euch nachher viel Arbeit. Selbst wenn ihr denkt, niemals so komplex zu werden, dann seht mal in der SVN-Referenz unter dem Stichpunkt Feature-Release nach. So etwas könnte auch euch mal passieren. Also spart nicht an dem einen Befehl und den drei Ordnern 🙂