# Distributed Concurrent Versions System

Das Distributed Concurrent Versions System (DCVS) ist ein verteiltes Versionskontrollsystem, das Softwareentwicklern, die an lokal verteilten Standorten arbeiten, eine effiziente Zusammenarbeit an einem Softwareprojekt ermöglicht. DCVS basiert auf dem bekannten Versionskontrollsystem Concurrent Versions System. Der Code ist unter den GNU- und BSD-ähnlichen Lizenzen frei verfügbar.

## Motivation

CVS basiert auf einem rein zentralistischen Organisationsmodell und bietet sehr wenig Offline-Unterstützung. Nahezu alle Operationen zur Versionskontrolle erfordern direkten Zugriff auf das Repository. Daher stehen weltweit verteilte Software-Entwicklungen bei der Verwendung von CVS vor großen Performance-Problemen. DCVS begegnet diesem Problem durch die Verteilung des zentralen CVS-Repositories auf viele Standorte.

## Features

DCVS bietet die gesamte CVS-Funktionalität. Aber im Gegensatz zu CVS kann ein DCVS-System eine beliebige Anzahl von geographisch verteilten Repositories umfassen, deren Inhalt im Hintergrund durch eine erweiterte Version von CVSup, einem von John D. Polstra entwickelten Programm, gleich gehalten wird. Die Kombination aus DCVS-Repository, erweitertem CVSup-Server und DCVS-Server-Programm wird im Folgenden DCVS-Server genannt.
Alle Inhalte aller Entwicklungslinien können von jedem der DCVS-Server in einen DCVS-Workspace eines Entwicklers ausgecheckt werden. Alle Operationen, die das Repository nicht verändern, wie z. B. diff, patch, log, annotate usw., funktionieren genau wie in CVS, benutzen aber immer das lokale Repository und sind daher in einem verteilten Szenario viel schneller. Um Kollisionen und Datenverluste zu vermeiden, wird jedem DCVS-Server ein Satz von Entwicklungslinien (DCVS-Branches) zugewiesen, für die er verantwortlich ist. Änderungen an einem Zweig dürfen nur auf dem Server eingecheckt werden, der für den Branch zuständig ist. Die Trennung der Änderungen nach Entwicklungslinien ermöglicht es, Änderungen automatisch in das DCVS-Netzwerk zu übertragen und zu verteilen. Eine Person, die Änderungen für eine Entwicklungslinie committen möchte, für die ihr lokaler DCVS-Server nicht zuständig ist, kann eine neue Entwicklungslinie (Branch) anlegen und die Änderungen an diese übergeben. Der lokale Server ist automatisch für jede neu angelegte Entwicklungslinie verantwortlich.
Andererseits kann jeder Entwickler Änderungen von Entwicklungslinien, für die sein lokaler DCVS-Server nicht verantwortlich ist, in lokale Entwicklungslinien zusammenführen. Somit können alle Änderungen, die an einem beliebigen Arbeitsort vorgenommen werden, von den Entwicklern auf dem zuständigen DCVS-Server durch eine Merge-Operation auf den ursprünglichen Branch übertragen werden.
Die Funktionalität der Änderungssätze ermöglicht es den Entwicklern, kleine Sätze von Änderungen in Bezug auf ein Merkmal oder einen Defekt zu erstellen, die dann von anderen angewendet werden können.
Ein spezielles Nummerierungsschema stellt sicher, dass Entwicklungslinien und Deltas als zu einem bestimmten DCVS-Server gehörend identifiziert werden können. DCVS ordnet jedem Paar (Server/Sammlung) eine eindeutige Spannweite von Zweignummern zu. Alle Bereiche für alle Server und Collections müssen sich gegenseitig ausschließen. Die Definitionen für Server, Collections und Bereiche werden aus einer einzigen Konfigurationsdatei gelesen. Anhand des Inhalts dieser Datei kann jeder DCVS-Server entscheiden, ob er für einen bestimmten Zweig oder ein Delta einer bestimmten Datei zuständig ist. Ist dies der Fall, sind alle Änderungsoperationen erlaubt; ist dies nicht der Fall, sind Änderungsoperationen nur auf dem entsprechenden Remote-Server möglich.
Auch die eigentlichen Namen von Konfigurationen, die Tags, werden durch ein alle Tags erweiterndes serverspezifisches Suffix (z. B. _at_dcvs_mydomain_org) eindeutig einem DCVS-Server zugeordnet. Dadurch dürfen keine Konflikte im Tag-Namensraum entstehen.

## Geschichte

DCVS wurde von Mitarbeitern der Elego Software Solutions GmbH in Berlin entwickelt. Die erste Version von DCVS wurde im August 2002 veröffentlicht. Im November 2005 wurde die Version 1.0.2 veröffentlicht.