This is the Title of the Book, ematter Edition rst Inhalt Vorwort........................................................ Einleitung....................................................... IX XIII 1 Einführung...................................................... 1 Was ist Subversion?.............................................. 1 Die Geschichte von Subversion..................................... 2 Eigenschaften von Subversion...................................... 3 Die Architektur von Subversion..................................... 5 Subversion installieren............................................ 6 Die Komponenten von Subversion................................... 6 Ein Schnelleinstieg............................................... 7 2 Grundlegende Konzepte............................................ 10 Das Repository.................................................. 10 Versionierungsmodelle............................................ 11 Subversion in Aktion............................................. 16 Zusammenfassung............................................... 24 3 Geführte Tour.................................................... 25 Hilfe!.......................................................... 25 Import......................................................... 25 Revisionen: Nummern, Schlüsselwörter und Daten...................... 26 Das erste Auschecken............................................. 29 Der wesentliche Arbeitsablauf...................................... 30 Die History untersuchen........................................... 45 Weitere nützliche Befehle.......................................... 50 Zusammenfassung............................................... 51 Inhalt V
4 Verzweigen und Zusammenführen..................................... 52 Was ist ein Zweig?............................................... 52 Zweige verwenden............................................... 53 Änderungen zwischen Zweigen kopieren.............................. 60 Gebräuchliche Anwendungsfälle für das Zusammenführen................ 66 Eine Arbeitskopie wechseln........................................ 72 Tags........................................................... 74 Die Pflege von Zweigen............................................ 76 Zusammenfassung............................................... 78 Link 5 Repository-Administration........................................... 79 Repository-Grundlagen............................................ 79 Repository-Erzeugung und -Konfiguration............................. 83 Repository-Wartung.............................................. 88 Projekte hinzufügen.............................................. 112 Zusammenfassung............................................... 115 6 Server-Konfiguration............................................... 116 Überblick...................................................... 116 Netzwerkmodell................................................. 117 svnserve: Ein eigener Server........................................ 121 httpd: Der Apache-HTTP-Server.................................... 127 Mehrere Methoden für den Repository-Zugriff unterstützen............... 143 7 Themen für Fortgeschrittene......................................... 146 Der Laufzeit-Konfigurationsbereich.................................. 147 Eigenschaften................................................... 155 Externals-Definitionen............................................ 170 Herstellerzweige................................................. 172 8 Informationen für Entwickler......................................... 179 Geschichteter Bibliotheksaufbau.................................... 179 Die APIs benutzen................................................ 192 Im Administrationsbereich einer Arbeitskopie.......................... 196 WebDAV...................................................... 199 Programmieren mit Speicherpools................................... 200 Etwas zu Subversion beitragen...................................... 203 VI Inhalt This is the Title of the Book, ematter Edition
chts 9 Vollständige Subversion-Referenz..................................... 207 Der Subversion-Kommandozeilen-Client: svn.......................... 207 svnadmin...................................................... 250 svnlook........................................................ 257 svnserve........................................................ 265 10 Die Neuerungen in Subversion 1.3..................................... 268 Eine neue Version................................................ 268 A Subversion für CVS-Benutzer......................................... 275 B Fehlerbehandlung................................................. 283 C WebDAV und Autoversionierung...................................... 291 D Werkzeuge von Drittanbietern........................................ 300 E Creative Commons Attribution License.................................. 303 This is the Title of the Book, ematter Edition Inhalt VII
This is the Title of the Book, ematter Edition rst Kapitel 1 KAPITEL 1 Einführung Versionskontrolle bezeichnet die Kunst, Änderungen von Informationen zu verwalten. Für Programmierer, die üblicherweise viel Zeit damit verbringen, kleine Änderungen an Software vorzunehmen und diese Änderungen am nächsten Tag wieder zu verwerfen, ist sie schon lange ein wichtiges Werkzeug. Der Wert von Versionskontrollsoftware reicht jedoch weit über die Grenzen der Softwareentwicklungswelt hinaus. Wo immer Menschen Computer einsetzen, um sich häufig ändernde Informationen zu verwalten, gibt es Gelegenheit für den Einsatz einer Versionskontrolle. Und an dieser Stelle kommt Subversion ins Spiel. Dieses Kapitel enthält eine Einführung in Subversion: Was es ist, was es tut, wie Sie es bekommen. Was ist Subversion? Subversion ist ein freies/open Source-Versionskontrollsystem. Das heißt, Subversion verwaltet Dateien und Verzeichnisse über einen Zeitraum hinweg. Ein Dateibaum wird in einem zentralen Repository abgelegt. Das Repository ist im Grunde ein normaler Fileserver, mit der Ausnahme, dass es sich an jede Änderung erinnert, die jemals an den Dateien und Verzeichnissen vorgenommen wurde. Dies erlaubt es Ihnen, ältere Versionen der Daten wiederherzustellen oder zu untersuchen, in welcher Weise Sie Ihre Daten im Laufe der Zeit geändert haben. Insofern stellen sich viele Leute ein Versionskontrollsystem als eine Art Zeitmaschine vor. Subversion kann über Netzwerkgrenzen hinweg auf sein Repository zugreifen, wodurch die Nutzung durch Personen auf unterschiedlichen Computern möglich ist. Zu einem gewissen Grad wird die Zusammenarbeit gefördert durch die Möglichkeit, dass unterschiedliche Leute die gleichen Daten von ihren verschiedenen Standorten aus ändern und verwalten können. Ein schnellerer Fortschritt ist möglich, wenn es nicht nur einen einzigen Kanal gibt, den alle Änderungen passieren müssen. Und da die Arbeit versioniert ist, 1
müssen Sie nicht befürchten, dass durch das Einsparen dieses Kanals die Qualität auf der Strecke bleibt wenn eine Änderung an den Daten verkehrt ist, dann machen Sie diese Änderung einfach rückgängig. Manche Versionskontrollsysteme sind gleichzeitig Systeme zur Softwarekonfigurationsverwaltung (Software Configuration Management; SCM). Diese Systeme sind speziell darauf ausgerichtet, Quellcodebäume zu verwalten, und besitzen viele Funktionen, die eigens für die Softwareentwicklung angelegt wurden sie verstehen von sich aus Programmiersprachen oder bringen Werkzeuge zum Kompilieren von Software mit. Subversion gehört allerdings nicht zu diesen Systemen. Es handelt sich vielmehr um ein allgemeines System, das eingesetzt werden kann, um jede Sammlung von Dateien zu verwalten. Bei Ihnen sind diese Dateien vielleicht Quellcode bei anderen geht es eher um Einkaufslisten oder Videoproduktionen oder anderes mehr. Link Die Geschichte von Subversion Am Anfang des Jahres 2000 begann das Unternehmen CollabNet, Inc. (http://www.collab. net) damit, Entwickler zu suchen, die einen Ersatz für CVS schreiben sollten. CollabNet bietet eine Collaboration Software Suite namens SourceCast, die als eine Komponente eine Versionskontrolle enthält. SourceCast benutzte zwar CVS als sein an-fängliches Versionskontrollsystem, die Grenzen von CVS waren jedoch von Beginn an offensichtlich, und bei CollabNet wusste man, dass man schließlich etwas Besseres finden müsste. Leider hatte sich CVS zu einem Quasi-Standard in der Open Source-Welt entwickelt, weil es nichts Besseres gab, zumindest nicht unter einer freien Lizenz. Deshalb beschloss man bei CollabNet, ein von Grund auf neues Versionskontrollsystem zu schreiben, das sich zwar an den grundlegenden Ideen von CVS orientiert, allerdings ohne die Bugs und Fehler. Im Februar 2000 kontaktierte das Unternehmen Karl Fogel, den Autor des Buches Open Source Development with CVS (Coriolis, 1999), und fragte ihn, ob er an diesem neuen Projekt mitarbeiten wolle. Zufälligerweise diskutierte Karl zu dieser Zeit gerade das Konzept für ein neues Versionskontrollsystem mit seinem Freund Jim Blandy. 1995 hatten die beiden Cyclic Software gegründet, eine Firma, die CVS-Dienstleistungsverträge anbot. Und obwohl sie später das Unternehmen verkauften, benutzten sie weiterhin CVS bei ihrer täglichen Arbeit. Ihr Frust mit CVS hatte Jim dazu veranlasst, über bessere Möglichkeiten der Verwaltung versionierter Daten nachzudenken. Er hatte sich dabei nicht nur den Namen Subversion bereits ausgedacht, sondern konnte auch schon das grundlegende Design des Subversion-Repository vorweisen. Als CollabNet anrief, stimmte Karl sofort zu, an dem Projekt mitzuarbeiten, und Jim brachte seinen Arbeitgeber, RedHat Software, dazu, ihn auf unbestimmte Zeit für das Projekt freizustellen. CollabNet stellte Karl und Ben Collins-Sussman ein, und die eigentliche Entwurfsarbeit begann im Mai. Mit Hilfe einiger gut platzierter Hinweise von Brian Behlendorf und Jason Robbins von CollabNet und Greg Stein (zu diesem Zeitpunkt unabhängiger Entwickler, aktiv im Web- DAV/DeltaV-Spezifikationsprozess) lockte Subversion schnell eine Gemeinschaft aktiver Entwickler an. Es stellte sich heraus, dass viele Leute die gleichen frustrierenden Erfah- 2 Kapitel 1: Einführung
chts rungen mit CVS gemacht hatten und die Chance nutzen wollten, endlich etwas daran zu ändern. Das ursprüngliche Entwurfsteam einigte sich auf einfache Ziele. Man wollte keine neuen Wege in der Versionskontrollmethodik beschreiten, sondern einfach nur CVS verbessern. Das Team war sich darin einig, dass Subversion dem CVS-Funktionsumfang entsprechen und das gleiche Entwicklungsmodell wahren, nicht jedoch die offensichtlichsten Fehler von CVS kopieren sollte. Zwar musste es kein transparenter Ersatz für CVS sein, sollte aber CVS dennoch so weit gleichen, dass ein Umstieg für jeden CVS-Benutzer mit minimalem Aufwand möglich war. Nach 14 Monaten Programmierung wurde Subversion am 31. August 2001 eigenständig, das heißt, die Subversion-Entwickler stiegen bei der Verwaltung des Quellcodes von CVS auf Subversion um. Obwohl CollabNet das Projekt ins Leben rief und auch weiterhin einen großen Teil der Arbeit finanziert (das Unternehmen bezahlt einige der Vollzeitentwickler von Subversion), wird Subversion wie die meisten Open Source-Projekte betrieben, gesteuert durch eine lockere, transparente Menge von Regeln, die die Meritokratie fördern. Die Copyright-Lizenz von CollabNet geht vollständig mit den Debian Free Software Guidelines konform. Mit anderen Worten, es steht jedem frei, Subversion nach Belieben herunterzuladen, zu verändern und weiterzugeben; er benötigt keine Erlaubnis von CollabNet oder sonst wem. Eigenschaften von Subversion Die Funktionen und Eigenschaften, die Subversion für die Versionskontrolle auf das Tapet bringt, lassen sich am besten dadurch beschreiben, inwiefern sie das Design von CVS verbessern. Falls Sie mit CVS nicht vertraut sind, werden Sie möglicherweise nicht alle Eigenschaften verstehen. Und falls Sie sich mit Versionskontrolle überhaupt nicht auskennen, sollten Sie vermutlich sowieso erst Kapitel 2 lesen, wo wir eine Einführung in die Versionskontrolle im Allgemeinen liefern. Subversion bietet: Verzeichnisversionierung CVS verfolgt nur die Historie einzelner Dateien, während Subversion ein virtuelles versioniertes Dateisystem implementiert, das nachvollzieht, wie sich ganze Verzeichnisbäume im Laufe der Zeit ändern. Dateien und Verzeichnisse werden versioniert. Echte Versionshistorie Da CVS sich auf die Dateiversionierung beschränkt, werden solche Operationen wie Kopieren und Umbenennen die an Dateien ausgeführt werden könnten, aber in Wirklichkeit Änderungen an einem übergeordneten Verzeichnis vornehmen in CVS nicht unterstützt. Außerdem können Sie in CVS eine versionierte Datei nicht durch ein neues Objekt des gleichen Namens ersetzen, ohne dass das neue Objekt die Eigenschaften von Subversion 3
Geschichte der alten möglicherweise gar nicht damit in Beziehung stehenden Datei erbt. Bei Subversion können Sie sowohl Dateien als auch Verzeichnisse hinzufügen, löschen, kopieren und umbenennen. Und jede neu hinzugefügte Datei beginnt mit einer frischen, neuen und eigenen Geschichte. Atomare Änderungsbestätigungen (Commits) Eine Sammlung von Modifikationen wird entweder vollständig oder überhaupt nicht in das Repository übernommen. Dadurch haben Entwickler die Möglichkeit, Änderungen als logische Einheiten aufzubauen und zu bestätigen. Das beugt Problemen vor, die auftreten könnten, wenn nur ein Teil einer bestimmten Menge von Änderungen erfolgreich an das Repository geschickt wird. Versionierte Metadaten Mit jeder Datei und jedem Verzeichnis ist eine Menge von Eigenschaften Schlüssel und deren Werte verknüpft. Sie können beliebige Schlüssel-/Wert-Paare anlegen und speichern. Die Eigenschaften werden ebenso wie die Dateiinhalte über die Zeit versioniert. Wahl der Netzwerkschichten Subversion verfolgt eine abstrahierte Auffassung des Repository-Zugriffs, wodurch neue Netzwerkmechanismen leichter implementiert werden können. Subversion kann als Erweiterungsmodul an den Apache-HTTP-Server angeschlossen werden. Dadurch hat Subversion einen großen Vorteil hinsichtlich Stabilität und Interoperabilität sowie sofortigen Zugriff auf existierende Funktionen, die von diesem Server zur Verfügung gestellt werden Authentifizierung, Autorisierung, transparente Komprimierung (Wire Compression) und so weiter. Ein abgespeckter autonomer Subversion-Server-Prozess ist ebenfalls verfügbar. Dieser Server verwendet ein eigenes Protokoll, das leicht über SSH getunnelt werden kann. Konsistente Behandlung der Daten Subversion drückt Dateiunterschiede mit Hilfe eines binären Differenzialgorithmus aus, der auf (vom Menschen lesbaren) Text- und (vom Menschen nicht lesbaren) Binär-Dateien identisch funktioniert. Beide Dateitypen werden gleich komprimiert im Repository abgelegt, Differenzen werden in beide Richtungen über das Netzwerk übertragen. Effizientes Verzweigen und Markieren Die Kosten für das Verzweigen (Branching) und Markieren (Tagging) müssen nicht proportional zur Projektgröße verlaufen. Subversion erzeugt Verzweigungen und Marken (Tags), indem es einfach das Projekt kopiert, wobei ein Mechanismus zum Einsatz kommt, der ähnlich einem harten Link ist. Dadurch erfordern diese Operationen nur einen kleinen, konstanten Zeitaufwand. Wartbarkeit Subversion trägt keinen historischen Ballast mit sich herum; das System ist als eine Sammlung von Shared-C-Bibliotheken mit wohldefrten APIs implementiert. Dadurch kann Subversion außerordentlich gut gewartet und von anderen Anwendungen und Sprachen genutzt werden. Link 4 Kapitel 1: Einführung
chts Die Architektur von Subversion Auf der einen Seite befindet sich ein Subversion-Repository, das alle Ihre versionierten Daten aufnimmt. Auf der anderen Seite liegt Ihr Subversion-Client-Programm, das die lokalen Wiedergaben von Teilen dieser versionierten Daten verwaltet (so genannte Arbeitskopien). Zwischen diesen Extremen gibt es mehrere Wege durch verschiedene Repository Access-(RA-)Ebenen. Einige dieser Wege verlaufen durch Computernetzwerke und Netzwerk-Server, die dann auf das Repository zugreifen. Andere umgehen das Netzwerk ganz und gar und greifen direkt auf das Repository zu. Abbildung 1-1 zeigt eine Art Gesamtansicht des Subversion-Designs. Abbildung 1-1: Die Architektur von Subversion Die Architektur von Subversion 5