Versionsverwaltung mit SubVersion und TortoiseSVN
Inhaltsverzeichnis
Von Stephan Soller, stephan.soller@helionweb.de.
Einleitung
Sobald mehrere Personen an einem Projekt zusammen arbeiten wird es immer schwerer die Daten des Projektes aktuell zu halten und die Änderungen der einzelnen Personen in eine zentrale Version zu übernehmen. Schon ab zwei oder drei Personen ist man oft mehr damit beschäftigt, die verschiedenen Dateien und Änderungen abzugleichen, als das zu tun was man eigentlich will: arbeiten.
Dieses Problem existiert nun schon so lange, wie Leute über einen Computer miteinander Arbeiten. Dem entsprechend gibt es auch Software, die bei diesen Problemen helfen kann. Eine freie und beliebte Software für diesen Zweck ist SubVersion.
Die Lösung: SubVersion
Die Basis von SubVersion (und fast jeder anderen Versionsverwaltung auch) ist ein zentral gespeichertes Archiv, die Repository. Wenn in diesem Archiv nun etwas geändert wird, überschreibt SubVersion nicht einfach die alten Daten, sondern speichert die neuen Änderungen zusätzlich zu den bereits vorhandenen Daten und markiert diese einfach als "aktuell". Auf diese Weise ist es möglich, jede früher Version einer Datei zu rekonstruieren. So kann man z.B. nachschauen, wie eine Datei vor zwei Wochen aussah und was man seit dem geändert hat.
Eine zentrale Repository hat aber auch Nachteile. Wenn sie sich z.B. auf einem Server im Internet befindet, müsste jeder Entwickler immer online sein. Dazu währe die Arbeit sehr stark von der Bandbreite der Verbindung abhängig. Desweiteren können auch sehr schnell konflikte entstehen, wenn mehrere Personen gleichzeitig eine Datei bearbeiten.
Allerdings wurden auch diese Probleme bereits gelöst. Will man die Daten in einer Repository bearbeiten, so wird zuerst eine Kopie der Daten auf der eigenen Festplatte erstellt. Die Arbeitskopie. Dort bearbeitet man die Daten nach Lust und Laune und läd die Änderungen anschließend wieder in die Repository hoch. Bei Bedarf kann man auch seine Arbeitskopie aktuallisieren und so die Änderungen anderer Personen herunterladen. Auf diese Weise kann jeder Entwickler ungestört für sich arbeiten und seine Änderungen mit den andren abgleichen.
SubVersion kümmert sich automatisch darum, die Änderungen Zeile für Zeile abzugleichen und meldet nur Konflikte, wenn sie sich nicht automatisch lösen lassen (z.B. wenn zwei Personen die gleiche Zeile bearbeitet haben und nun ihre Änderungen hochladen).
Inhalt des Tutorials
In diesem Tutorial wird nun erklärt, wie man mit SubVersion-Client ToroiseSVN eine Repository ansehen kann, sich eine Arbeitskopie erstellt, die Daten bearbeitet und anschließend wieder in die Repository hoch läd.
Um das ganze möglichst anschaulich darzustellen, wird im Laufe des Tutorials eine Testrepository zur Demonstration verwendet. Um auf eine Repository zuzugreifen benötigt ihr ihre URL bzw. Adresse und die Logindaten um euch anzumelden. Diese Daten bekommt ihr im Normalfall vom Projektleiter oder Admin. Die Daten der hier verwendeten Testrepository sehen so aus:
- Repository-URL
- "svn://helionweb.de/test"
- Benutzer
- "user"
- Passwort
- •••••••• (ist nicht weiter wichtig)
Nun haben wir alles, was wir brauchen. Legen wir los...
TortoiseSVN herunterladen und installieren
Um überhaupt erst mal mit der Repository verbindung aufnehmen zu können, brauchen wir ein SubVersion-Client. Genau so wie man einen IRC-Chat-Client braucht, um auf einem IRC-Server mit chatten zu können. TortoiseSVN ist so ein SubVersion-Client. Ihr könnt ihn auf der Homepage runter laden. Für die ungeduldigen gibt es hier auch noch einen Link, direkt zur Download-Seite: TortoiseSVN herunterladen
Das Kontexmenü wird von TortoiseSVN
um zwei Punkte erweitert.
TortoiseSVN gibt es ausschließlich für Windows. Für andere Platformen und Betriebssystem gibt es allerdings noch eine Reihe anderer SubVersion-Clients wie RapidSVN.
Nach dem TortoiseSVN installiert wurde, ist leider noch ein Neustart nötig, damit TortoiseSVN geladen werden kann. Nach dem Neustart sollten die zwei neue Einträge "SVN Checkout..." und "TortoiseSVN" im Kontexmenü (auch "Rechtsklickmenü" genannt) erscheinen.
Repositories ansehen
Das grundlegende zuerst. Werfen wir einen Blick in die Repository. Geht dazu in das Kontexmenü auf den Menüpunkt "TortoiseSVN". Darauf zeigt sich eine Liste mit recht vielen Möglichkeiten und Aktionen. Wählt hier den Punkt "Repo-browser" fast ganz oben aus.
Nun sollte ein Fenster erscheinen, in dem ihr die URL der Repository eingeben könnt. Tragt bitte hier die Daten ein, dir ihr vom Projektleiter oder Admin bekommen habt. Für unsere Testrepository würde die URL "svn://helionweb.de/test" drinne landen.
Unter Umständen wird danach noch ein Dialog angezeigt, bei dem ihr euren Benutzernamen und Passwort eingeben müsst. Es ist durchaus gängig, dass man alleine schon um Repositories anzusehen eine Anmeldung braucht. Man will ja nicht immer, dass jeder sich die Daten eine Projektes ansehen kann.
Jetzt öffnet sich ein Fenster mit einer Order- und Dateistruktur. Das ist der Inhalt der Repository.
Der Repository-Browser zeigt die Ordner und Datein in einer Repository an.
Der Screenshot oben zeigt die Ordner der Testrepository. Die ersten drei Ordner ("branches", "tags" und "trunk") findet ihr in fast jeder SubVersion Repository. Sie gehöhren zum Standartaufbau einer Repository.
Der Ordner "trunk" (dt. Stamm) enthält immer die aktuellsten Daten des Projekts. An diesen Daten wird immer gearbeitet. Er ist so zu sagen der Hauptentwicklungszweig.
"tags" (dt. Markierungen) enthält Verweise auf ältere Versionen des "trunk"-Ordners. Wenn z.B. das Team die Entwicklung einer stabielen Version in "trunk" abgeschlossen hat und die neue Version veröffentlicht, wird in "tags" ein Verweis auf diese Version von "trunk" erstellt. So kann man immer schnell auf diese Version zugreifen und weiß auch, welche Version veröffentlicht wurde.
In "branches" (dt. Verzweigungen) wird schließlich an gesonderten Entwicklungszweigen des Projekts gearbeitet.
Es gibt auch die Möglichkeit, die Daten der Repository direkt über den Repo-browser zu bearbeitern (z.B. "Create Folder"). Das sollte aber nur in Außnahmefällen vom Admin oder Projektleiter gemacht werden, da so jeder Arbeitsschritt eine eigene Revision erzeugt. Dadurch kann die Repository recht unübersichtlich werden.
Daten aus Repositories "auschecken"
Um nun die Daten richtig bearbeiten und benutzen zu können, erstellen wir jetzt eine Arbeitskopie des Ordners "trunk". Die Ordner "branches" und "tags" werden während der normalen Entwicklung nicht benutzt, darum währe es Platz- und Bandbreitenverschwendung, sie auch in der Arbeitskopie runter zu laden. Markiert im Repo-browser nun den Ordner "trunk", klickt rechts um das Kontexmenü aufzurufen und wählt dort "Checkout...". Darauf hin erscheint der Checkout Dialog:
Der Checkout-Dialog. Wichtig sind vor allem die Felder "URL of repository" und "Checkout directory".
In "URL of repository" sollte schon die passende URL zum "trunk" Ordner eingetragen sein. In "Checkout directory" müsst ihr nun den Ordner auswählen, in dem die Arbeitskopie lokal gespeichert wird. In unserem Beispiel währe das der Ordner "D:\Test". Mit einem Klick auf OK legt TortoiseSVN los und erstellt eine Arbeitskopie.
Öffnet nun den Ordner der Arbeitskopie ("D:\Test"). Dort seht ihr nun die gleichen Daten wie im "trunk"-Ordner der Repository. Einigen fällt vieleicht auf, dass im jedem Ordner der Arbeitskopie ein Unterordner ".svn" existiert. Darin befindet sich eine Kopie der Orginaldaten, die man vom SubVersion-Server runter geladen hat. Dadurch werden die Arbeitskopien leider doppelt so groß, wie die eigentlichen Daten. Allerdings ist es SubVersion erst dadurch möglich, neue Änderungen ohne Verschwendung von Bandbreite zum Server zu übertragen. Man kann dadurch auch ohne Verbindung zum Server jeder Zeit die Daten zu der Version zurücksetzen, die man runtergeladen hat.
Datein bearbeiten
Die Arbeitskopie besteht aus ganz normalen Datein und Ordnern. Der Inhalt von Datein lässt sich also auch wie gehabt mit dem vertrauten Editor bearbeiten.
Besonders auffällig sind hier die kleinen Icons, mit denen TortoisSVN den Status der Datein und Ordner anzeigt. Ein grüner Haken kennzeichnet Datein, die nicht bearbeiten wurden. Sobald eine Datei bearbeitet wurde, ändert sich das kleine Icon in einen rotes Ausrufezeichen. Gleichzeitig werden auch alle Überordner dieser Datei mit einem roten Ausrufezeichen gekennzeichnet. Dadurch weiß man immer, ob und wo man welche Datein bearbeitet hat.
Eine Arbeitskopie, in der schon einige Datein bearbeitet wurden.
Datein und Ordner kopieren, umbenennen, verschieben und löschen
Die Menüpunkte zum Umbenennen und Löschen von Datein und Ordnern.
Im Prinzip kann man die Datein und Ordner einer Arbeitskopie ganz normal handhaben. Allerdings gibt es hier einige Ausnahmen. Beim Löschen, Umbenennen und Verschieben von Ordnern oder Daten muss man die Funktionen von TotoiseSVN nutzen. Das ist leider nötig, damit TortoiseSVN diese Aktionen nachvollziehen kann.
Nutzt man nicht die Funktionen von TortoiseSVN so erwartet es unter dem alten Namen nach wie vor z.B. einen Ordner. Da er aber nicht mehr unter diesem Namen existiert, wird er als "missing" (dt. fehlend) angezeigt. Gleichzeitig fasst er den umbenannten Ordner als komplett neuen Ordner auf. Wenn man jetzt die Änderungen hochläd wird der alte Ordner in der Repository nicht gelöscht (er fehlt ja nur in der lokalen Arbeitskopie). Es gehen dadurch zwar keine Daten verlohren, aber so kann die Versionsverwaltung nicht nachvollziehen, was genau gemacht wurde. Wenn z.B. andere Entwickler nun die Änderungen übernehmen würden zwar der neue (umbenannte) Ordner angelegt werden, aber die alten nicht gelöscht werden.
Änderungen zur Repository hochladen
Nachdem wir unsere Änderungen erledigt haben, müssen wir die Daten nun wieder in die Repository hochladen. Öffnet dazu irgend wo innerhalb der Arbeitskopie das Kontexmenü und wählt "SVN Commit...". Darauf hin öffnet sich folgender Dialog:
Der Commit-Dialog. Hier könnt ihr die Änderungen wählen, die hochgeladen werden sollen. Wichtig ist auch die Nachricht ("Message"), damit die Anderen auch wissen, was ihr gemacht habt.
In dem Dialog solltet ihr bei "Message" reinschreiben, was ihr alles geändert habt. Andere Entwickler können so nachvollziehen, was genau ihr an den Daten geändert habt und warum ihr es gemacht habt. In der unteren Liste werden alle vorgenommenen Änderungen angezeigt. Mit dem Haken vor den Einträgen könnt ihr festlegen, ob einzelne Änderungen hochgeladen werden sollen, oder nicht.
Mit einem Klick auf "OK" werden die Daten gesendet. Wenn TortoiseSVN fertig ist, sind die Änderungen komplett in der Repository. Andere Entwickler können nun auf die aktuellen Daten zugreifen.
Abschließende Worte
Dieses Tutorial hier behandelt nur das Grundlegende. Es krazt gerade mal an der Oberfläche, von dem, was SubVersion und TortoisSVN bieten. Sie bieten noch einige Funktionen, die die tägliche Arbeit sehr erleichtern können. Sei es "Show log", der "Revision graph" oder "Merge". Am besten erstellt man in einem leeren Ordner über "Create repository here..." eine lokale Testrepository. Eine gesunde Portition Neugierde und Experimentierfreude erledigt dann meist den Rest. Ich kann an dieser Stelle nur die Hilfe von TortoisSVN empfehlen. Dadurch ergeben so mache Sachen auf einmal Sinn...
Ich persönlich kann mir das Arbeiten an Projekten ohne SubVersion kaum noch vorstellen. Nachdem ich einigermaßen mit SubVersion und TortoiseSVN umgehen konnten hab ich all meine Projekte darauf umgestellt. Seit dem hab ich überhaupt keinen Ärger mehr mit verschiedenen Versionen einer Datei. Alles ist schön aufgeräumt und man braucht keine Angst mehr zu haben, wenn man etwas löscht. Man kommt ja jeder Zeit wieder ran.
Von den Auswirkungen auf meine Entwicklungsarbeit kann ich den Einsatz von SubVersion und TortoiseSVN locker mit dem Umstieg von Notepad zu einer kompletten Entwicklungsumgebung (z.B. Visual Studio, Macromedia Dreamweaver) vergleichen. Es erleichtert die Arbeit extrem und recht schnell ist es so selbstverständlich wie die bevorzugte Entwicklungsumgebung.
Ich hoffe, dass euch dieses Tutorial einen groben Einblick in die Arbeit mit SubVersion und TortoiseSVN gegeben hat und auch ein paar Hintergründe geklärt hat.
Wenn ihr Fragen, Kritik oder Verbesserungsvorschläge habt, könnt ihr gerne einen Kommentar abgeben. Alle Arten von Kritik sind willkommen.
Kommentare
2. Super Erklärung
am 25.2.2007 15:12 Uhr von Torsten Zenk , tzenk@gmx.net, www.systembutler.de
3. Späte Antwort
am 18.3.2007 17:10 Uhr von Stephan Soller , , www.arkanis-development.de
@Bernd Brenner:
Wahrscheinlich hast du schon einen Weg gefunden, deinen Quelltext in SubVersion zu übertragen. Ich kenne dafür 2 Wege:
Den Ordner markieren, den du importieren willst. Im Kontex-Menü
TotoiseSVNund dann
Import.... Dort kannst du dann den Pfad der Repository eintragen, in die der Ordner importiert werden soll.
Der zweite Weg währe, zuerst mal eine Arbeitskopie von der leeren Repository auszuchecken. Dort die bestehenden Ordner mit dem Quelltext reinkopieren und alles in einem großen Commit zur Repository hinzufügen.
Welcher weg dir besser gefällt ist Geschmackssache. Persönlich setzte ich den zweiten öfter ein, da er einem mehr Kontrolle bietet.
Ich hoffe die späte Anwort bringt dir noch was.
Kommentar verfassen
Leider wurden die Kommentare zu sehr für Spam misbraucht und deshalb hab ich sie erst mal deaktiviert.
Bei Fragen oder Anregungen zu dem Tutorial schickt mir bitte eine eMail an stephan.soller@helionweb.de.
1. Hallo Stephan,
am 15.2.2007 19:00 Uhr von Bernd Brenner , ,
Eine Frage ist geblieben: Wenn ich meine bisherigen Sourcen (Ordnerhierarchie mit ca. 3 Ordnertiefen) in TurtoiseSVN hinzufügen will, muss ich soch"Add folder..." im Repro-Browser benutzen, nicht wahr? Was ich allerdings nicht verstehe ist, warum er dann nicht alle Subfolders "frisst", sondern nur die Datieen in der obersten Ebene.
Mache ich was falsch?
Danke schonmal und nochmal..
Viele Grüße aus München,
Bernd