Versionskontrollsoftware, auch bekannt als Revisionskontrolle oder Quellkontrollsysteme, wird verwendet, um Änderungen an Softwareentwicklungsprojekten zu verfolgen und es Teammitgliedern zu ermöglichen, dieselben Dateien zu ändern und zusammenzuarbeiten. Versionskontrollsoftware ermöglicht es Entwicklern, gleichzeitig an Code zu arbeiten und ihre eigene Arbeit durch sogenannte Branches zu isolieren. Branches schützen Codeänderungen vor den Änderungen in anderen Branches, können jedoch zusammengeführt werden, wenn der Entwickler bereit ist. Versionskontrollsysteme ermöglichen es Entwicklern, ihre Arbeit automatisch zu verfolgen, eine Historie aller Änderungen einzusehen und bei Bedarf zu früheren Versionen eines Projekts zurückzukehren. Alle Codeänderungen und Branches werden in einem Repository (oft als „Repo“ bezeichnet) aufbewahrt.
Versionskontrollsysteme werden von Softwareentwicklungsteams verwendet, um den Entwicklungsprozess zu optimieren, Code für mehrere Projekte zu verwalten und eine Historie von Codeänderungen zu pflegen. Bei der Auswahl einer Versionskontrollsoftware benötigen Benutzer oft eine Hosting-Lösung für die Versionskontrolle, um ihr Master-Repository zu hosten, in das Entwickler ihre Codeänderungen einpflegen. Entwickler verwenden häufig Versionskontroll-Clients, um die Funktionalität ihrer Versionskontrollsysteme über eine grafische Benutzeroberfläche (GUI) zu verwalten. Versionskontrollsysteme integrieren sich mit einer Vielzahl von Softwareentwicklungstools, einschließlich IDE, Build-Automatisierungssoftware und PaaS-Anbietern.
Um in die Kategorie der Versionskontrollsoftware aufgenommen zu werden, muss ein Produkt:
Eine Möglichkeit bieten, mit der Entwickler Codeänderungen verfolgen können
Entwicklern ermöglichen, eine Historie der Änderungen einzusehen
Entwicklern erlauben, gleichzeitig an denselben Code-Dateien zu arbeiten
Entwicklern ermöglichen, ihren Code durch Branching zu isolieren
Code aus verschiedenen Branches auf Befehl zusammenführen
Entwicklern Konflikte bei Codezusammenführungen anzeigen und ihnen ermöglichen, diese zu lösen
Entwicklern erlauben, ihre Änderungen auf einen vorherigen Zustand zurückzusetzen