Zum Inhalt springen

Glossar · M

Monorepo

Repository, das mehrere Projekte oder Pakete gemeinsam verwaltet. Gemeinsamer Build, gemeinsame Releases, atomares Refactoring über Grenzen hinweg.

Definition

Ein Monorepo, kurz für Monolithisches Repository, ist ein Versionierungssystem, das mehrere Projekte oder Pakete innerhalb eines einzigen Repositories verwaltet. Im Gegensatz zu einem Polyrepo, bei dem jedes Projekt in einem eigenen Repository gespeichert wird, ermöglicht ein Monorepo die zentrale Verwaltung von Code, Abhängigkeiten und Versionen. Dies führt zu einer vereinheitlichten Codebasis, die in der Regel von einer Vielzahl von Teams oder Entwicklern genutzt wird.

Die Struktur eines Monorepos kann unterschiedlich sein, umfasst jedoch häufig mehrere Module, Bibliotheken oder Anwendungen, die in einem gemeinsamen Verzeichnisbaum organisiert sind. Diese Organisation erleichtert die Zusammenarbeit zwischen den Teams, da Änderungen an einem Projekt sofort Auswirkungen auf andere Projekte haben können, die von denselben Abhängigkeiten oder Modulen abhängen.

Hintergrund

Der Begriff Monorepo hat in den letzten Jahren an Bedeutung gewonnen, insbesondere im Kontext großer Softwareunternehmen wie Google, Facebook und Twitter, die diese Struktur nutzen, um ihre umfangreichen Codebasen zu verwalten. Die Idee hinter Monorepos ist nicht neu, wurde jedoch durch die zunehmende Komplexität von Softwareprojekten und die Notwendigkeit einer besseren Zusammenarbeit zwischen Teams populär. Die erste dokumentierte Verwendung eines Monorepos geht auf die frühen 2000er Jahre zurück, als Unternehmen begannen, diese Methode zur Optimierung ihrer Entwicklungsprozesse zu implementieren.

Die Verwendung eines Monorepos kann auch die Einführung von Continuous Integration (CI) und Continuous Deployment (CD) erleichtern, da alle Projekte in einem zentralen Repository zusammengeführt werden. Dies ermöglicht eine schnellere und konsistentere Bereitstellung von Softwareupdates und -änderungen, da alle Abhängigkeiten und Versionen an einem Ort verwaltet werden.

Funktionsweise

In einem Monorepo werden alle Projekte und deren Abhängigkeiten in einem einzigen Repository gespeichert. Entwickler können Änderungen an verschiedenen Projekten vornehmen und diese in einem gemeinsamen Build-Prozess zusammenführen. Ein typisches Merkmal von Monorepos ist die Verwendung von Tools zur Verwaltung von Abhängigkeiten, die sicherstellen, dass alle Projekte mit den richtigen Versionen der benötigten Bibliotheken arbeiten.

Ein weiterer Vorteil von Monorepos ist die Möglichkeit des atomaren Refactorings. Entwickler können Änderungen an mehreren Projekten gleichzeitig vornehmen, ohne sich um die Komplexität von Versionskontrollsystemen kümmern zu müssen, die bei der Arbeit mit mehreren Repositories auftreten können. Dies führt zu einer höheren Effizienz und weniger Fehlern bei der Integration von Änderungen.

Einsatzgebiete

Monorepos werden häufig in großen Unternehmen eingesetzt, die mehrere verwandte Projekte oder Produkte entwickeln. Beispiele hierfür sind Tech-Giganten wie Google, die ein Monorepo für die Entwicklung ihrer gesamten Software verwenden, einschließlich Android und Google Cloud. Auch Unternehmen im Bereich der Finanzdienstleistungen und E-Commerce nutzen Monorepos, um die Zusammenarbeit zwischen verschiedenen Teams zu verbessern und die Codebasis zu vereinheitlichen.

Darüber hinaus finden Monorepos Anwendung in Open-Source-Projekten, bei denen mehrere Module oder Bibliotheken in einem einzigen Repository zusammengeführt werden, um die Entwicklung und Wartung zu erleichtern. Dies kann insbesondere bei Projekten von Vorteil sein, die eine enge Integration zwischen verschiedenen Komponenten erfordern.

Abgrenzung

Monorepos unterscheiden sich grundlegend von Polyrepos, bei denen jedes Projekt in einem eigenen Repository gespeichert ist. Während Polyrepos eine klare Trennung zwischen Projekten bieten und die Verwaltung von Versionskontrollen vereinfachen können, bringen sie auch Herausforderungen in Bezug auf die Zusammenarbeit und das Management von Abhängigkeiten mit sich. Entwickler müssen häufig zwischen verschiedenen Repositories wechseln, was den Entwicklungsprozess verlangsamen kann.

Ein verwandtes Konzept ist das Multi-Repo, das eine Mischung aus Monorepo und Polyrepo darstellt. Hierbei werden verwandte Projekte in Gruppen organisiert, die jeweils in einem eigenen Repository gespeichert sind, während andere Projekte in separaten Repositories verwaltet werden. Diese Struktur kann eine gewisse Flexibilität bieten, jedoch auf Kosten der zentralen Verwaltung und der Vorteile, die ein Monorepo bietet.