# Einführung

Versionkontrolle ist die Kunst Änderungen zu Verwalten. Es war lange Zeit ein kritisches Werkzeug für Programmierer die üblicherweise ihre Zeit damit verbrachten kleine Änderungen an Software vorzunehmen und diese am nächsten Tag wieder rückgängig zu machen. Aber die Nützlichkeit von Versionkontrollsoftware liegt weit außerhalb der Grenzen der Softwareentwicklungswelt. Überall wo Menschen Computer Verwenden, um Daten zu Verwalten ändern sich diese häufig/ständig. Und das ist der Punkt wo Subversion ins Spiel kommt.

Das Kapitel enthält eine Einführung in Subversion auf hoher Ebene. Was es ist? Was es tut? Wie man es bekommt?

## Was ist Subversion?

Subversion ist ein freies/Open-Soucrce Versionskontroll System. Subversion verwaltet Dateien und Verzeichnisse über die Zeit hinweg. Ein Baum der Dateien wird in ein Zentrales repository abgelegt. Das Repository ist wie ein gewöhlicher File Server, aussser das der sich an jede jemals gemachte Änderung erinnert. Das erlaubt es Ihnen jede ältere Version Ihrer Daten wieder her zustellen, oder die Geschichte der Änderungen zu untersuchen. In dieser Hinsicht, stellen sich viele Leute ein Versionskontrollsystem als eine Art von Zeitmaschine vor.

Subversion is a free/open-source version control system. That is, Subversion manages files and directories over time. A tree of files is placed into a central repository. The repository is much like an ordinary file server, except that it remembers every change ever made to your files and directories. This allows you to recover older versions of your data, or examine the history of how your data changed. In this regard, many people think of a version control system as a sort of time machine.

Subversions erlaubt den Zugriff auf sein Repository durch ein Netzwerk, womit der Zugriff durch Leute von unterschiedlichen Rechnern aus ermöglicht wird. ...At some Level die Möglichkeit verschiedener Leute Datensätze an unterschiedlichen Orten zu Verwalten und zu modifizieren fördert die Zusammenarbeit. Fortschritt kann früher eintreten als ohne eine Kanaliserung durch die alle Änderung laufen müssen. Und Aufgrund der Tatsache, dass die Arbeit Versioniert wird brauchen Sie nicht zu befürchten, dass die Qualität der Ausgleich für den Verlust der Kanalisierung ist wenn eine Fehlerhafte Änderung an den Daten durchgeführt wurde. Es kann einfach rückgängig gemacht werden.

Subversion can access its repository across networks, which allows it to be used by people on different computers. At some level, the ability for various people to modify and manage the same set of data from their respective locations fosters collaboration. Progress can occur more quickly without a single conduit through which all modifications must occur. And because the work is versioned, you need not fear that quality is the trade-off for losing that conduit—if some incorrect change is made to the data, just undo that change.

Einige Versionskontrollsysteme sind auch Software Konfigurations Management Systeme (SKM). Diese Systeme sind speziell darauf zugeschnitten, Quellcodebäume zu verwalten. Sie haben sehr viele Funktionalitäten, die auf die Software Entwicklung ausgerichtet sind. z.B. die Angebore Fähigkeit Programmiersprachen zu verstehen oder liefern Spezielle Werkzeuge zum Erzeugen (build) von Software. Subversion, aber ist keines von diesen Systemen. Es ist ein allgemeines System welches zur Verwaltung jeder Art von Dateien verwendet werden kann. Für Sie können die Dateien Quellcode sein, während es für andere eine Einkaufsliste im Supermarkt ist bis zur Video Liste und darüber hinaus.

Some version control systems are also software configuration management (SCM) systems. These systems are specifically tailored to manage trees of source code, and have many features that are specific to software development—such as natively understanding programming languages, or supplying tools for building software. Subversion, however, is not one of these systems. It is a general system that can be used to manage any collection of files. For you, those files might be source code—for others, anything from grocery shopping lists to digital video mixdowns and beyond.

## Die Geschichte von Subversion

Anfang 2000, CollabNet, Inc. (http://www.collab.net) suchte Entwickler to eine Ersatz für CVS erstellen sollten. CollabNet bot eine Collaboration Software Suite genannt SourceCast an, von deren eine Komponente Versionskontrolle ist. Obwohl SourceCast CVS als initiale Versionskontrolle verwendete, die Grenzen von CVS waren von Anfang an offensichtlich, wusste CollabNet dass es etwas besseres finden mußte. Bedauerlicherweise war CVS ein de facto Standard in der Welt der Open Source weil es nichts besseres gab, wenigstens nicht unter einer freien Lizenz. Somit entschied sich CollabNet ein neues Versionskontrollsystem von Grund auf neu zu entwickeln, aber unter zurückhaltender Übernahme der Grundideen von CVS, aber ohne deren Fehler und Misständen.

In early 2000, CollabNet, Inc. (http://www.collab.net) began seeking developers to write a replacement for CVS. CollabNet offers a collaboration software suite called SourceCast, of which one component is version control. Although SourceCast used CVS as its initial version control system, CVS's limitations were obvious from the beginning, and CollabNet knew it would eventually have to find something better. Unfortunately, CVS had become the de facto standard in the open source world largely because there wasn't anything better, at least not under a free license. So CollabNet determined to write a new version control system from scratch, retaining the basic ideas of CVS, but without the bugs and misfeatures.

Im Frebruar 2000, nahmen Sie kontakt zu Karl Fogel, dem Autor von Open Source Development with CVS (Coriolis, 1999) und fragten Ihn ob er an diesem neuen Projekt arbeiten wollte. Zu dieser Zeit war Karl Fogel zufälligerweise in Kontakt mit seinem Freund Jim Blandy und diskutierte ein neues Design eines neuen Versionskontrollsystems. 1995 hatten die beiden Cyclic Software gegründet welches Support Verträge für CVS bot, welche Sie später verkauften, wärend die Verwendung von CVS in der täglichen Arbeit weiter geführt wurde. Ihre Frustration mit CVS liess Jim über bessere Wege der Versionsverwaltung nachdenken, wobei er nicht nur dem Namen Subversion lieferte, sondern auch mit dem Grundlegenden Design des Subversion Repositories. Als CollabNet bei Karl Anfragte, stimmte Karl sofort zu im Projekt mit zu arbeiten, womit Jim seinen Arbeitgeber, RedHat Software, welcher die hauptsächliche Unterstützung über einen umbestimmten Zeitraum für das Projekt darstellte, gefunden.

CollabNet liehen sich Karl und Ben Collins-Sussman aus und die Arbeiten am Detail Design begannen im Mai. Mit einigen wohl platzierten anstößen von Brian Behlendorf und Jason Robbins von CollabNet und Greg Stein (zu der Zeit ein unabhängiger Entwickler aktiv im WebDAV/DeltaV Spezifikationsprozeß), zog Subversion schnell eine Gemeinschaft von aktiven Entwicklern an. Es zeigte sich, dass viele Leute die gleichen frustrierenden Erfahrungen mit CVS hatten, und begrüßten die Chance etwas zu ändern.

In February 2000, they contacted Karl Fogel, the author of Open Source Development with CVS (Coriolis, 1999), and asked if he'd like to work on this new project. Coincidentally, at the time Karl was already discussing a design for a new version control system with his friend Jim Blandy. In 1995, the two had started Cyclic Software, a company providing CVS support contracts, and although they later sold the business, they still used CVS every day at their jobs. Their frustration with CVS had led Jim to think carefully about better ways to manage versioned data, and he'd already come up with not only the name Subversion, but also with the basic design of the Subversion repository. When CollabNet called, Karl immediately agreed to work on the project, and Jim got his employer, RedHat Software, to essentially donate him to the project for an indefinite period of time. CollabNet hired Karl and Ben Collins-Sussman, and detailed design work began in May. With the help of some well-placed prods from Brian Behlendorf and Jason Robbins of CollabNet, and Greg Stein (at the time an independent developer active in the WebDAV/DeltaV specification process), Subversion quickly attracted a community of active developers. It turned out that many people had had the same frustrating experiences with CVS, and welcomed the chance to finally do something about it.

Das ursprüngliche Design Team setzte auf einige einfache Ziele. Sie wollten keine neuen Grundlagen im Bereich der Versionskontrolle finden, sie wollten einfach die Probleme bei CVS ablösen. Sie entschieden sich dafür, dass Subversion die CVS Features abdeckte und das gleiche Entwicklungs Modell bei behielt aber nicht die meist offensichtlichen Risse? übernahm.

Obgleich es war nicht nötig ein drop-in? Ersatz für CVS zu sein, es an CVS angelehn sein, damit CVS Anwender den Übergang mit geringem Aufwand durchführen konnten.

The original design team settled on some simple goals. They didn't want to break new ground in version control methodology, they just wanted to fix CVS. They decided that Subversion would match CVS's features, and preserve the same development model, but not duplicate CVS's most obvious flaws. And although it did not need to be a drop-in replacement for CVS, it should be similar enough that any CVS user could make the switch with little effort.

Nach vierziehn Monanten Entwicklung, konnte Subversion sich am 31. August 2001 selbst Verwalten. Damit stoppten die Subversion Entwickler die Verwendung von CVS und verwendeteten Subversion ab diesem Zeitpunkt selbst zur Verwaltung.

After fourteen months of coding, Subversion became self-hosting on August 31, 2001. That is, Subversion developers stopped using CVS to manage Subversion's own source code, and started using Subversion instead.

Während CollabNet das Projekt initiierte, und finanziert einen großen Teile der Arbeit (bezahlt die Gehälter von einigen Voll-Zeit Subversion Entwicklern), Subversion schreitet voran wie die meisten Open-Source Projekte, beherrscht durch lockere, transparenten Satz von Regeln der die Leitstungsbereitschaft bestärkt. CollabNet Urheberlizenz ist konform der Debian Freien Software Richtlinien. Mit anderen Worten, jedem steht es frei, Subversion runter zu laden, zu modifizieren und es weiter zu verbreiten wie es einem gefällt ohne Erlaubnis von CollabNet oder irgend jemand anderem ist Notwendig.

While CollabNet started the project, and still funds a large chunk of the work (it pays the salaries of a few full-time Subversion developers), Subversion is run like most open-source projects, governed by a loose, transparent set of rules that encourage meritocracy. CollabNet's copyright license is fully compliant with the Debian Free Software Guidelines. In other words, anyone is free to download, modify, and redistribute Subversion as he pleases; no permission from CollabNet or anyone else is required.

## Die Subversion Funktionen

Wenn die Diskussion über die Funktionen von Subversion auf den Tisch kommt, ist es meist hilfreich über die Begriffe zu Nennen, die Sie über das CVS Design stellen???? Satz? Wenn Sie nicht mit CVS vertraut sind, verstehen Sie eventuell nicht alle dieser Funktionen. Wenn Sie auch nicht mit Versionskontrolle vertraut sind, erstarren Ihre Augen so lange Sie nicht lesen, wo eine behutsame Einführung in das Themengebiet Versionskontrolle vorgenommen wird.

When discussing the features that Subversion brings to the version control table, it is often helpful to speak of them in terms of how they improve upon CVS's design. If you're not familiar with CVS, you may not understand all of these features. And if you're not familiar with version control at all, your eyes may glaze over unless you first read , in which we provide a gentle introduction to version control in general.

Subversion provides:

Verzeichnisversionierung

  CVS zeichnet lediglich die Geschichte von einzelnenen Dateien auf, während Subversion ein virtuelles versioniertes Dateisystem implementiert, das die Änderung an ganzen Verzeichnissbäumen über die Zeit aufzeichnet. Dateien und Verzeichnisse werden versioniert.

  CVS only tracks the history of individual files, but Subversion implements a virtual versioned filesystem that tracks changes to whole directory trees over time. Files and directories are versioned.

Wahre Geschichte True version history

  Während CVS auf die Versionierung von Dateien beschränkt ist und operationen wie kopieren und umbenennen was manchmal mit Dateien passiert, können die Dinge die sich tatsächlich ändern, nämlich die Verzeichnisse nicht durch CVS versioniert werden.

  Zusätzlich können Sie in CVS keine versionierte Datei durch eine Datei gleichen Namens aber anderen Inhaltes ersezten ohne die aufgezeichnete Geschichte der alten Datei zu erben, die aber ohne Bezug zur ihrem aktuellen Inhalt ist. Mit Subversion können Sie sowohl Dateien als auch Verzeichnisse hinzufügen, löschen, kopieren, umbenennen sowohl der Dateien als auch der Verzeichnisse und jede neu hinzugefügte Datei begint mit einer frischen und leeren Geschichte seiner selbst.

  Since CVS is limited to file versioning, operations such as copies and renames—which might happen to files, but which are really changes to the contents of some containing directory—aren't supported in CVS. Additionally, in CVS you cannot replace a versioned file with some new thing of the same name without the new item inheriting the history of the old—perhaps completely unrelated— file. With Subversion, you can add, delete, copy, and rename both files and directories. And every newly added file begins a with a fresh, clean history all its own.

Atomaree Commits... Atomic commits

  Ein Sammlung von Ändungern geht entweder vollständig in das Repository oder aber keine. Das erlaubt Entwicklern die Konstruktion und das Commiten von logischen Einheiten als ganzes und verhindert Probleme, die auftreten können wenn nur Teile eines Änderungssatzes erfolgreich in das Repository gesichert wurden.

  A collection of modifications either goes into the repository completely, or not at all. This allows developers to construct and commit changes as logical chunks, and prevents problems that can occur when only a portion of a set of changes is successfully sent to the repository.

Versionierte Metadaten Versioned metadata

  Jede Datei und Verzeichnis an einen Satz von Eigenschaften; Schlüssel zu denen Werte assoziiert sind. Sie können beliebig Schlüssel/Werte Kombinationen erzeugen und speichern. Eigenschaften werden über die Zeit versioniert wie das mit dem Inhalt von Dateien ebenfalls gemacht wird.

  Each file and directory has a set of properties—keys and their values— associated with it. You can create and store any arbitrary key/value pairs you wish. Properties are versioned over time, just like file contents.

Choice of network layers

  Subversion hat eine Abstrakte Vorstellung über den Zugriff auf das Repository um es einfach zu ermöglichen neue Netzwerk Mechanismen zu implementieren. Subversion kann als Apache Module in den HTTP Server angeschlossen werden als ein Erweiterungsmodul. Das gibt Subversion einen großen Vorteil bzgl. Stabilität und Kompatibilität und direktem Zugriff auf vorhandene Eigenschaften die durch den Server zur Verfügung gestellt werden. Authentifizierung, Berechtigung, Datenkompression usw. Eine eigenständiger einfacher Subversion Server ist ebenfalls vorhanden. Dieser spricht ein maßgeschneidertes Protokoll, dass einfach via SSH getunnelt werden kann.

  Subversion has an abstracted notion of repository access, making it easy for people to implement new network mechanisms. Subversion can plug into the Apache HTTP Server as an extension module. This gives Subversion a big advantage in stability and interoperability, and instant access to existing features provided by that server—authentication, authorization, wire compression, and so on. A more lightweight, standalone Subversion server process is also available. This server speaks a custom protocol which can be easily tunneled over SSH.

Konsistente Datenverarbeitung

  Subversion drückt die Unterschiede von Dateien unter der Verwendung eines binären Differenzalgorithmus aus, der sowohl für Text (visuell wahrnehmbar) als auch für binäre Daten arbeitet. Beide arten von Dateien werden in gleicher Form komprimiert im Repository gespeichert und die Unterschiede werden in beiden Richtungen über das Netzwerk transportiert.

  Subversion expresses file differences using a binary differencing algorithm, which works identically on both text (human-readable) and binary (human-unreadable) files. Both types of files are stored equally compressed in the repository, and differences are transmitted in both directions across the network.

Effizientes Branching und Tagging Efficient branching and tagging

  Die Kosten für Brachinung und Tagging sind nicht proportional zur Projektgröße. Subversion erzeugt Branches und Tags durch das einfache kopieren eines Projektes unter der Verwendung eines Mechanismus ähnlich zu einem Hard-Link. Folglich benötigt die Operation nur eine kleine konstante Menge von Zeit.

  The cost of branching and tagging need not be proportional to the project size. Subversion creates branches and tags by simply copying the project, using a mechanism similar to a hard-link. Thus these operations take only a very small, constant amount of time.

Attakierbarkeit ?? Hackability

  Subversion schleppt keine Altlasten aus der Vergangenheit mit. Es ist als eine Sammlung von Shared C Bibliotheken impementiert und mit einer wohldefinierten Schnittstelle (API) versehen. Das macht Subversion extrem wartbar und Einsetzbar in anderen Applikationen und Sprachen.

  Subversion has no historical baggage; it is implemented as a collection of shared C libraries with well-defined APIs. This makes Subversion extremely maintainable and usable by other applications and languages.

## Die Subversion Architektur Subversion's Architecture

Abbildung 1.1 illustriert was man als einen Blick aus großer Höhe auf das Subversion Design bezeichnen würde.

Figure 1.1 illustrates what one might call a mile-high view of Subversion's design.

### Subversion Architektur

Auf der einen Seite ist Subversion ein Repository dass die Historie aller Ihrer Versionierten Daten vorhält. Auf der anderen Seite ist Subversion ein Client Programm, dass die Lokale Reflektion eines Teils der versionierten Daten ( working copies genannt) darstellt. Zwischen diesen Beiden extremen sind vielfältige Wege durch Repository Zugriffs (RA) Schichten. Einige dieser Wege gehen durch Netzwerke und durch Netzwerk Server welche dann dann auf das Repository zugreifen. Andere Umgehen Netzwerk Server gänzlich und greifen auch das Repository direkt zu.

On one end is a Subversion repository that holds all of your versioned data. On the other end is your Subversion client program, which manages local reflections of portions of that versioned data (called working copies). Between these extremes are multiple routes through various Repository Access (RA) layers. Some of these routes go across computer networks and through network servers which then access the repository. Others bypass the network altogether and access the repository directly.

## Subversion Installation Installing Subversion

Subversion ist auf einer Portabilitäts Schicht APR (Apache Portable Runtime Library). Das bedeutet, dass Subversion auf jedem Betriebssystem laufen sollte auf dem der Apache Web Server läuft. Windows, Linux, alle Arten von BSD, Mac OS X, Netware und andere.

Subversion is built on a portability layer called APR (the Apache Portable Runtime library). This means Subversion should work on any operating system that the Apache httpd server runs on: Windows, Linux, all flavors of BSD, Mac OS X, Netware, and others.

Der einfachste Weg, um Subversion zu bekommen ist es, eine binär Paket für das jeweilige Betriebssystem down zu loaden. Auf der Subversion Web Seite (http://subversion.tigris.org) finden sich oft Pakete die durch freiwilige erzeugt wurden. Die Seite enthält üblicherweise grafische Installations Pakete für die Anwender des Microsoft Betriebssystems. Wenn Sie ein Unix artiges Betriebssystem verwenden, können Sie

The easiest way to get Subversion is to download a binary package built for your operating system. Subversion's website (http://subversion.tigris.org) often has these packages available for download, posted by volunteers. The site usually contains graphical installer packages for users of Microsoft operating systems. If you run a Unix-like operating system, you can use your system's native package distribution system (RPMs, DEBs, the ports tree, etc.) to get Subversion.

Alternativ kann man Subversion auch direkt aus dem Source Code übersetzen. Nach dem herunterladen der aktuellesten Release von der Subversion Web Seite und nachfolgendem entpacken folgen Sie bitte den Anweisungen in der Datei `INSTALL`, um Subversion zu compileren. Beachten Sie bitte, dass ein veröffentliches Souce Code Pakete alles beinhaltet, um eine Kommandozeilen Client, der in der Lage ist sich mit einem Remote Repository zu unterhalten (speziell APR, APR-Util und die Neon Bibliotheken) entsprechend zu übersetzen. Aber andere optionale Teile von Subversion können noch andere Abhängigkeiten besitzen, wie z.B. Berkely DB und möglichweise Apache httpd. Wenn Sie eine vollständige Übersetzung durchführen möchten, so versichern Sie sich, dass Sie alle benötigten Pakete, die in der Datei `INSTALL` angegeben sind auch haben. Wenn Sie die Absicht haben an Subversion selbst zu arbeiten, können Sie eigenes Client Programm dazu verwenden, um eine Aktuelle Version (bleeding edge?) zu erhalten. Das wird in beschrieben.

Alternately, you can build Subversion directly from source code. From the Subversion website, download the latest source-code release. After unpacking it, follow the instructions in the `INSTALL` file to build it. Note that a released source package contains everything you need to build a command-line client capable of talking to a remote repository (in particular, the apr, apr-util, and neon libraries). But optional portions of Subversion have many other dependencies, such as Berkeley DB and possibly Apache httpd. If you want to do a complete build, make sure you have all of the packages documented in the `INSTALL` file. If you plan to work on Subversion itself, you can use your client program to grab the latest, bleeding-edge source code. This is documented in .

## Die Subversion Komponenten

Einmal installiert, besteht Subversion aus einer Menge von unterschiedlichen Teilen. Der nachfolgende Teile ist ein kurzer überblick über das was dann zur Verfügung steht. Seien Sie nicht beunruhigt, wenn Sie diese kurze Einführung Kopf kratzend zurück läßt. Es folgenden noch eine Menge weitere Seiten in diesem Buch, die dazu gedacht sind diese Irritationen zu lindern.

Subversion, once installed, has a number of different pieces. The following is a quick overview of what you get. Don't be alarmed if the brief descriptions leave you scratching your head—there are plenty more pages in this book devoted to alleviating that confusion.

svn

  Kommandozeilen Client The command-line client program.

svnversion

  Ein Programm, um den Zustand

  A program for reporting the state (in terms of revisions of the items present) of a working copy.

svnlook

  Ein Werkzeug, um das Subversion Repository zu betrachten.

  A tool for inspecting a Subversion repository.

svnadmin

  Das Werkzeug um ein Subversion Repository zu erzeugen, tweaking? oder es zu reparieren.

  A tool for creating, tweaking or repairing a Subversion repository.

svndumpfilter

  Ein Programm zur Filterung einer Subversion Repository Dump Datei.

  A program for filtering Subversion repository dumpfile format streams.

mod_dav_svn

  Ein Plug-In Modul für den Apache HTTP Server, welches es den Zugriff für andere auf das Repository ermöglicht.

  A plug-in module for the Apache HTTP Server, used to make your repository available to others over a network.

svnserve

  Ein maßgeschneidertes Programm als Standalone Server Programm, welcher als Deamon Prozeß Verwendung findet, der auch über SSH aufgerufen werden kann. Das ist ein anderer Weg, um ein Repository per Netzwerk verfügbar zu machen.

  A custom standalone server program, runnable as a daemon process or invokable by SSH; another way to make your repository available to others over a network.

Unter der Annahme, dass Subversion einwandfrei installiert wurde, sind wir jetzt fertig un können loslegen. Die nächsten beiden Kapitel werden die Verwendung von `svn` der Subversion Kommandozeilen Client zeigen.

zeigen. Assuming you have Subversion installed correctly, you should be ready to start. The next two chapters will walk you through the use of `svn`, Subversion's command-line client program.