Versionskontrolle bezeichnet die systematische Erfassung von Änderungen an Dateien über die Zeit, sodass sich frühere Stände nachvollziehen, vergleichen und bei Bedarf wiederherstellen lassen.
Statt einzelne Dateistände manuell zu kopieren und umzubenennen, protokolliert ein Versionskontrollsystem jede Änderung automatisch mit Zeitpunkt, Urheberin oder Urheber und Beschreibung. So lässt sich jederzeit nachvollziehen, wer wann was geändert hat, und jeder frühere Stand bleibt erhalten.
Jede Änderung an einer Datei wird als neuer, eigenständiger Stand im System hinterlegt, meist zusammen mit einer kurzen Beschreibung des Zwecks der Änderung. Bei zentralen Systemen wird die gesamte Änderungsgeschichte auf einem Server vorgehalten, auf den Beteiligte über das Netzwerk zugreifen; bei verteilten Systemen erhält jede Mitwirkende und jeder Mitwirkende eine vollständige Kopie der gesamten Historie auf dem eigenen Rechner und kann sie mit anderen Kopien abgleichen. Dadurch lassen sich Änderungen verschiedener Personen zusammenführen, frühere Zustände wiederherstellen und die Ursache von Fehlern durch Vergleich der Versionen leichter eingrenzen.
Mehrere Entwicklerinnen und Entwickler arbeiten gleichzeitig an unterschiedlichen Teilen desselben Programms. Die Versionskontrolle verfolgt jede ihrer Änderungen einzeln nach und führt sie anschließend kontrolliert zu einem gemeinsamen, aktuellen Stand zusammen.
Versionskontrolle wird eingesetzt, um Änderungen an Quellcode und anderen Dateien nachvollziehbar zu machen, die Zusammenarbeit mehrerer Personen an denselben Dateien zu ermöglichen und im Fehlerfall gezielt zu früheren, funktionierenden Ständen zurückzukehren. Sie bildet damit eine Grundvoraussetzung für arbeitsteilige Softwareentwicklung.
Versionskontrolle ist kein automatisches Backup-System im klassischen Sinn: Sie schützt primär vor dem Verlust der Nachvollziehbarkeit von Änderungen, nicht notwendigerweise vor dem vollständigen Verlust aller Daten, falls keine zusätzliche Sicherung existiert. Zudem löst Versionskontrolle allein keine inhaltlichen Konflikte zwischen parallelen Änderungen an derselben Stelle einer Datei – diese müssen weiterhin von den Beteiligten inhaltlich aufgelöst werden.
Nicht zu verwechseln mit Git: Dieses ist ein konkretes, weit verbreitetes Versionskontrollsystem, Versionskontrolle selbst ist das allgemeine Prinzip dahinter, das auch andere Werkzeuge umsetzen. Ebenfalls abzugrenzen ist Backup: Dieses sichert Datenbestände gegen Verlust, verfolgt aber nicht gezielt die inhaltliche Änderungsgeschichte einzelner Dateien.