Subversion? TortoiseSVN?
Subversion-Konzept in Kurzfassung:
- Ein Repository besteht wie gehabt aus Verzeichnissen mit Dateien drin. Es existiert allerdings in verschiedenen Versionen. Jedes Mal, wenn jemand eine Änderung in's Repository hochlädt (Check-in oder Commit), wird eine neue Version angelegt. Wenn man sich eine Kopie vom Repository zieht, ist das normalerweise die aktuellste Version.
- Benutzt man die Checkout-Funktion, wird lokal eine Working Copy angelegt. Das ist eine Kopie der Daten im Repository mit ein paar zusätzlichen .svn-Verzeichnissen, die Metadaten enthalten und an denen man auf keinen Fall von Hand rumfummeln sollte. Durch die Metadaten werden die im folgenden beschriebenen Punkte realisiert.
- Eine Working Copy lässt sich mit dem Update-Befehl auf den aktuellen Stand bringen. Habt ihr die lokale Version einer Datei bearbeitet, werden Änderungen, soweit automatisch möglich, zusammengeführt; ansonsten wird die Datei als conflicted markiert. Ihr kriegt dann einen Viewer zu sehen, der euch die Unterschiede zeigt. Habt ihr die Konflikte beseitigt, markiert ihr den Konflikt auf der Datei als resolved.
- Ist es soweit, dass ihr einen Commit machen wollt, verwendet ihr den entsprechenden Befehl. U.U. kommt ein Hinweis, dass die Version auf dem Server neuer ist und erst ein Update gemacht werden muss. Wichtig: habt ihr neue Dateien hinzugefügt oder alte entfernt (natürlich bleiben die Dateien in älteren Versionen des Repositories erhalten), müsst ihr die entsprechenden Dateien/Verzeichnisse mit dem Add- bzw. Remove-Befehl entsprechend markieren. Auch das Umbenennen von Dateien muss über den Rename-Befehl passieren (und das Verschieben per Move), sonst gibt's Chaos.
- Ein Repository hat — per Konvention — folgendes Layout (Verzeichnisstruktur)
- branches/ (parallele Entwicklungsstränge. Werden unterschiedliche Versionen eines Projekts separat gepflegt, kann man diese separaten Versionen hier unterbrigen.)
- tags/ (speziell markierte Versionen des Repositories, etwa Releases.)
- trunk/ (der aktuelle Stand der Entwicklung, quasi Bleeding Edge.)
- Um einen Branch anzulegen, kopiert man (per Copy-Befehl) einfach die gewünschte Version (etwa den gesamten Inhalt von trunk/) nach branches/ in ein neues Unterverzeichnis, etwa branches/release-1.0. Danach kann man in diesem Verzeichnis die Entwicklung für den 1.0-Zweig weiterführen.
- Um einen Tag anzulegen, macht man das gleiche, aber nach tags/. Per Konvention werden Unterverzeichnisse von tags/ nicht mehr geändert.
- Andere Versionskontrollsysteme bieten die Möglichkeit, Änderungen aus einem Entwicklungszweig in einen anderen zu übertragen (Merge). Subversion hat sowas auch, aber wenn in beiden Branches Änderungen vorgenommen wurden, muss man leider oft die Hälfte von Hand machen. Naja. Werden wir sicher nicht so dringend brauchen.
Nützliche weitere Befehle:
- Log. Pro Datei kann man sich ein Logfile der letzten Änderungen anzeigen lassen.
- Blame. Zeigt für jede Zeile einer Datei an, wer sie zuletzt verändert hat.
Speziell in TortoiseSVN:
- Es gibt einen eigenen Menüpunkt für Branch/Tag.
- Verschieben heißt in TSVN Relocate.
- Einige der Funktionen verstehe ich selbst nicht. Hab irgendwie noch nie das Handbuch gelesen.
Trac?
Diese Webanwendung heißt Trac. Sie bietet einen Repository-Browser sowie relativ nahtlose Integration zwischen einem neuen Ticketsystem, diesem Wiki und Commits/Changesets.
Spezielles Feature: in Commit-Messages (was das ist, seht ihr, wenn ihr das erste Mal einen Commit macht oder in die Trac-Timeline guckt) kann man Tickets manipulieren. Enthält eine Commit-Message etwa den Text fixes #123, #234 and #444, wird die Commit-Message als Kommentar in die genannten Tickets eingefügt und die Tickets werden geschlossen. Statt fixes kann man auch closes schreiben. Um das Ticketschließen wegzulassen, verwendet man see oder refs.
Erste Schritte
- TortoiseSVN herunterladen (s.o.).
- ein Verzeichnis anlegen, in dem ihr den Code haben wollt.
- darin Rechtsklick (Explorer), Checkout. URL steht in der Referenz auf der Hauptseite. Bestätigen, yadda yadda.
- Rumändern, Commit etc. Freuen.
- Fragen an mich oder an die diversen Handbücher richten. Evtl. diese Seite um weitere Hinweise ergänzen.