Was ist ein zentrales Versionskontrollsystem?
Ein zentrales Versionskontrollsystem bietet Software-Entwicklungsteams eine Möglichkeit, über einen zentralen Server zusammenzuarbeiten.
In einem zentralen Versionskontrollsystem (CVCS), auch bekannt als zentralisierte Quellcodekontrolle oder Revisionskontrollsystem, fungiert ein Server als zentrales Repository, in dem jede Version des Codes gespeichert wird. Bei der zentralen Versionskontrolle committet jede(r) Benutzer(in) direkt in den main-Branch. Daher eignet sich diese Art der Versionskontrolle oft gut für kleine Teams, wo die Teammitglieder schnell miteinander kommunizieren können, damit nicht zwei Entwickler(innen) gleichzeitig versuchen, am selben Teil des Codes zu arbeiten. Eine gute Kommunikation und Zusammenarbeit sind wichtig, um sicherzustellen, dass ein zentraler Workflow
erfolgreich ist.
Zentrale Versionskontrollsysteme – wie CVS, Perforce und SVN – erfordern, dass die Benutzer(innen) die neueste Version vom Server abrufen und eine lokale Kopie auf ihren Rechner herunterladen. Die Mitwirkenden pushen dann Commits auf den Server und lösen alle Merge-Konflikte im Haupt-Repository.
Als Client-Server-Modell ermöglicht ein zentralisierter Workflow das Sperren von Dateien, so dass ein Teil des Codes, der gerade ausgecheckt ist, für andere nicht zugänglich ist, wodurch sichergestellt wird, dass jeweils nur ein(e) Entwickler(in) am Code arbeiten kann. Die Teammitglieder verwenden Branches, um zum zentralen Repository beizutragen, und der Server gibt die Dateien nach der Zusammenführung wieder frei.
Die häufigsten zentralen Versionskontrollsysteme sind Concurrent Versions System (CVS), Perforce und Subversion (SVN). Außerdem gibt es den Microsoft Team Foundation Server (TFS), der jetzt als Azure DevOps Server bekannt ist.
Git, das am weitesten verbreitete Versionskontrollsystem, ist kein zentrales VCS, sondern ein verteiltes VCS.
Funktioniert gut mit Binärdateien
Binärdateien, wie z. B. grafische Ressourcen und Textdateien, benötigen viel Speicherplatz, weshalb Softwareentwickler(innen) auf zentrale Versionskontrollsysteme zurückgreifen, um diese Daten zu speichern. Mit einem zentralen Server können Teams ein paar Codezeilen abrufen, ohne den gesamten Verlauf auf ihrem lokalen Computer zu speichern. Benutzer(innen) von verteilten Systemen müssen das gesamte Projekt herunterladen, was Zeit und Platz kostet und sie daran hindert, Diffs zu erstellen. Wenn ein Team regelmäßig mit Binärdateien arbeitet, bietet ein zentrales System den effizientesten Ansatz für die Codeentwicklung.
Bietet volle Sichtbarkeit
An einem zentralen Ort hat jedes Teammitglied den vollen Überblick darüber, an welchem Code gerade gearbeitet wird und welche Änderungen vorgenommen werden. Dieses Wissen hilft den Softwareentwicklungsteams, den Stand eines Projekts nachzuvollziehen und bietet eine Grundlage für die Zusammenarbeit, da die Entwickler(innen) ihre Arbeit auf dem zentralen Server teilen. Bei einem zentralen Versionskontrollsystem gibt es nur zwei Daten-Repositories, die die Benutzer(innen) im Auge behalten müssen: die lokale Kopie und den zentralen Server.
Verkürzt die Lernkurve
Die zentrale Versionskontrolle ist einfach zu verstehen und zu benutzen, so dass Entwickler(innen) aller Qualifikationsstufen schnell Änderungen einbringen und zur Codebase beitragen können. Die Einrichtung des Systems und des Workflows ist ebenfalls einfach und erfordert keinen großen Zeitaufwand, um festzulegen, wie das Softwareentwicklungsteam das Tool nutzen soll. Wenn Entwickler(innen) schnell und einfach durch einen Workflow navigieren können, sind sie in der Lage, sich auf die Entwicklung von Features zu konzentrieren, anstatt sich eine Reihe komplizierter Schritte für das Zusammenführen von Änderungen zu merken. Die verkürzte Lernkurve trägt auch dazu bei, dass neue Entwickler(innen) so schnell wie möglich aktiv werden können.
Ein Single Point of Failure gefährdet Daten
Der größte Nachteil ist der Single Point of Failure im zentralen Server. Wenn der Remote-Server ausfällt, kann niemand mehr am Code arbeiten oder Änderungen vornehmen. Der fehlende Offline-Zugriff bedeutet, dass jede Störung die Codeentwicklung erheblich beeinträchtigen und sogar zum Verlust des Codes führen kann. Das gesamte Projekt und Team kommt während eines Ausfalls zum Stillstand. Im Falle eines Festplattendefekts müssen sich Softwareentwicklungsteams auf Backups verlassen, um den aktuellen Stand eines Projekts wiederherzustellen. Wenn Backups nicht ordnungsgemäß aufbewahrt wurden, verliert das Team alles. Beim Speichern aller Versionen auf einem zentralen Server laufen Teams jederzeit Gefahr, ihren Quellcode zu verlieren. Nur die Momentaufnahmen auf den lokalen Computern sind abrufbar, aber das ist eine kleine Menge an Code im Vergleich zum gesamten Verlauf eines Projekts.
Im Gegensatz zu einem zentralen VCS kann bei einem verteilten Versionskontrollsystem jede(r) Benutzer(in) eine lokale Kopie des Projektverlaufs auf dem eigenen Computer haben. So wird bei einem Ausfall jede lokale Kopie zu einer Sicherungskopie und die Teammitglieder können offline weiterarbeiten.
Langsame Geschwindigkeit verzögert die Entwicklung
Benutzer(innen) von zentralisierten Versionskontrollsystemen können Branches häufig nur langsam erstellen, da sie für jeden Befehl mit dem Remote-Server kommunizieren müssen, was die Codeentwicklung verlangsamt.
Die Erstellung von Branches wird zu einer zeitaufwändigen Aufgabe und begünstigt Merge-Konflikte, weil die Entwickler(innen) ihre Änderungen nicht schnell genug in das zentrale Repository einspeisen können, damit andere sie sehen können. Für Teammitglieder mit einer langsamen Netzwerkverbindung wird der Codeentwicklungsprozess noch mühsamer, wenn sie versuchen, sich mit dem Remote-Server zu verbinden.
Die Geschwindigkeit, mit der Softwareentwicklungsteams vorgehen, wirkt sich direkt darauf aus, wie schnell sie Funktionen bereitstellen und einen geschäftlichen Mehrwert liefern können. Wenn die Entwicklung in den Teams langsam voranschreitet, geraten Iteration und Innovation ins Stocken und die Entwickler(innen) können frustriert sein, weil es so lange dauert, bis ihre Änderungen in der Anwendung sichtbar werden. Wenn der Remote-Server oder die Netzwerke ausfallen, kann es dazu kommen, dass Releases verpasst werden und die Teammitglieder nicht in der Lage sind, die verlorene Zeit aufzuholen und Änderungen schnell zu veröffentlichen.
Wenige stabile Zeitpunkte, um Veränderungen zu veröffentlichen
Ein zentralisierter Workflow ist für kleine Teams einfach zu nutzen. Bei der Zusammenarbeit mit größeren Teams stößt dieses Konzept jedoch an seine Grenzen. Wenn mehrere Entwickler(innen) an demselben Code arbeiten wollen, wird es schwierig, einen stabilen Zeitpunkt für Änderungen zu finden. Instabile Änderungen können nicht in das zentrale Repository gepusht werden, sodass die Entwickler(innen) sie so lange lokal aufbewahren müssen, bis sie veröffentlich werden können.
Da Benutzer(innen) die Veröffentlichung von Änderungen hinauszögern, können sich Softwareentwicklungsprojekte verzögern und es können Merge-Konflikte auftreten, weil der Rest des Teams keinen Einblick in die Änderungen hat, die nur lokal auf einem Computer existieren. Wenn die Änderungen schließlich in das zentrale Repository gepuscht werden – nachdem Stabilitäts- und Geschwindigkeitsprobleme behoben wurden – müssen die Benutzer(innen) beim Zusammenführen auftretende Konflikte schnell lösen, damit der Rest des Teams zum Code beitragen kann. Der Mangel an Stabilität veranlasst viele Teams dazu, auf ein anderes Versionskontrollsystem wie Git umzusteigen.
In der dynamischen Welt der Softwareentwicklung wird ein zentrales Versionskontrollsystem (CVCS) zum Eckpfeiler für Teams, die eine effiziente Zusammenarbeit und optimierte Prozesse anstreben. Dieses System nutzt die Leistung eines zentralen Servers, um einen umfassenden Versionsverlauf zu dokumentieren. Ein CVCS vereinfacht den Entwicklungsprozess, indem es einzelnen Entwickler(inne)n erlaubt, direkt zum Main-Branch beizutragen.
Das Besondere an einem CVCS ist, dass es eine einheitliche Plattform für die Versionskontrolle bietet, die sicherstellt, dass jedes Teammitglied mit dem neuesten Code arbeitet. Dies erhöht die Produktivität und fördert eine Kultur der Transparenz.
Erfahre, wie GitLab die Softwareentwicklung modernisiert
Möchtest du mehr über die Versionskontrolle erfahren?
Alle Ressourcen anzeigenBist du bereit?
Erfahre mehr darüber, was dein Team mit der umfassendsten KI-gestützten DevSecOps-Plattform erreichen kann.