# Repository

Ein Repository (Plural: Repositorys; englisch für Lager, Depot oder auch Quelle; Plural: repositories), auch – direkt aus dem Lateinischen entlehnt – Repositorium (Pl. Repositorien), oft kurz Repo, ist ein verwaltetes Verzeichnis zur Speicherung und Beschreibung digitaler Objekte für ein digitales Archiv.
Bei den verwalteten Objekten kann es sich beispielsweise um Programme (Software-Repository), Publikationen (Dokumentenserver), Datenmodelle (Metadaten-Repository), betriebswirtschaftliche Verfahren oder Forschungsdaten handeln. Häufig beinhaltet ein Repository auch Funktionen zur Versionsverwaltung der verwalteten Objekte. Diese Repositorys sind der Eckpfeiler für wissenschaftliche Zusammenarbeit weltweit und werden rasant zunehmend genutzt.

## Repository zur Versionsverwaltung

Bei Versionsverwaltungssystemen wie CVS, Git oder SVN werden die Quellcodedateien oder andere Dateien in einem Repository oder Projektarchiv gehalten. Sie werden von dort „ausgecheckt“, d. h. auf den Rechner eines Programmierers kopiert. Nach der Bearbeitung werden die geänderten Dateien wieder in das Repository „eingecheckt“, wobei die Veränderung – optional mit Kommentaren des eincheckenden Entwicklers versehen – protokolliert wird. Die Versionsverwaltung dient der Dokumentation der Entwicklung, erlaubt aber auch die jederzeitige Rekonstruktion von früheren Zuständen des Quelltexts.
Ein solches Versionsverwaltungssystem ermöglicht die Zusammenarbeit von großen Teams an Softwareprojekten, da über die Versionsverwaltung Unterschiede an Dateien gefunden und von einem merge-Mechanismus nach Bearbeitung durch mehrere Entwickler zusammengefügt werden können. Somit geht keine Änderung verloren und es fließen alle Änderungen in einen neuen gemeinsamen Stand ein.
Eine Hauptfunktion der Versionsverwaltung ist die Versionsgeschichte, die es Entwicklern ermöglicht, auf jeden von einem Benutzer „eingecheckten“ Stand einer oder mehrerer Dateien zurückzuspringen und diese Version zu verwenden.

## Software-Repository

Hierbei enthält das Repository Programmpakete und zugehörige Metadaten, z. B. Beschreibungen der Pakete, Abhängigkeitsinformationen und Änderungsprotokolle. Das Installieren bzw. Aktualisieren der Software aus dem Repository übernimmt ein Paketmanager. Daher wird in diesem Zusammenhang auch oft die deutschsprachige Bezeichnung Paketquelle benutzt. Populäre Beispiele für Software-Repositorys sind CPAN oder Portable Apps.
Dieses Prinzip wird häufig von Linux-Distributionen verwendet, um dem Benutzer an zentraler Stelle Zugriff auf aktuelle oder getestete Software zu ermöglichen. Ein Vorteil ist, dass mit einem Update durch die Paketverwaltung sowohl das System als auch die Anwendungen aktualisiert werden und so das manuelle Überprüfen der Aktualität durch Besuch der einzelnen Projektwebseiten entfällt. Die Pflege eines Programmpakets in einem Update-Repository übernimmt ein Paket-Maintainer, der meist aus der Community rund um die Distribution stammt und nicht in die eigentliche Entwicklung der Software involviert sein muss.

## Metadaten-Repository

Bei Metadaten-Repositorien handelt es sich üblicherweise um Datenbanktabellen zur Verwaltung von Metadaten, die als Basis für hochintegrative Systeme dienen. In ihnen sind alle notwendigen Beschreibungen zum System selbst und zur Umwelt enthalten. Mit Hilfe von Metadaten-Repositorys können diese Systeme ohne Programmieraufwand flexibel auf Änderungen reagieren nach dem Motto: „Definieren statt Programmieren“. Metadaten-Repositorys werden unter anderem in Data-Warehouse und EAI-Architekturen eingesetzt.
Auch die freie Faktensammlung Wikidata kann in diesem Sinne als Repository angesehen werden.

## CASE-Werkzeuge

Bei manchen Modellierungswerkzeugen („CASE“ = Computer-aided software engineering) dient das Repository zur Speicherung aller Projektdaten wie beispielsweise Diagrammen, Quellcode und Dokumentationen.

## Dokumentenserver

Für wissenschaftliche Publikationen, die online zugänglich gemacht werden, wird der Begriff Repository bzw. häufiger auf Deutsch Repositorium synonym für Dokumentenserver verwendet. Ein Beispiel für einen Dokumentenserver ist ArXiv.org.