Versionierung (auch Versionskontrolle oder englisch Version Control) ist die systematische Verwaltung von Änderungen an Dateien und Code. Jede Änderung wird als Version festgehalten, sodass man jederzeit nachvollziehen kann, wer wann was geändert hat — und bei Problemen zu einem früheren Stand zurückkehren kann. Ohne Versionierung geht in modernen Softwareprojekten praktisch nichts mehr.
Warum Versionierung wichtig ist
- Nachvollziehbarkeit: Jede Änderung ist dokumentiert — wer, wann, warum (Commit-Message).
- Sicherheit: Fehler lassen sich per Rollback rückgängig machen.
- Teamarbeit: Mehrere Personen arbeiten parallel am selben Projekt, ohne sich gegenseitig zu überschreiben.
- Experimentieren: Neue Ideen entstehen in eigenen Branches, ohne den stabilen Stand zu gefährden.
Zentrale Konzepte
- Repository: Der zentrale Speicher aller Versionen (lokal oder auf einem Server wie GitHub).
- Commit: Ein festgehaltener Zwischenstand mit Änderungsprotokoll.
- Branch: Ein eigener Arbeitszweig, z.B. für ein neues Feature.
- Merge: Das Zusammenführen eines Branches in einen anderen.
- Tag: Ein benannter Marker, meist für Release-Stände.
Verteilte Versionskontrolle mit Git
Das heute dominierende Werkzeug ist Git. Im Gegensatz zu älteren zentralen Systemen (wie SVN) besitzt bei Git jeder Entwickler eine vollständige Kopie des Repositorys. Das macht die Arbeit auch offline möglich und beschleunigt Operationen wie Branching und Merging erheblich.
Ein typischer Arbeitsablauf: Änderungen mit git add vormerken, mit git commit als Version festhalten und mit git push in das gemeinsame Repository übertragen. Für Teams mit mehreren parallelen Features empfiehlt sich ein Branching-Modell wie GitFlow.
Semantische Versionierung (SemVer)
Um Versionsnummern eindeutig zu kommunizieren, hat sich das Schema MAJOR.MINOR.PATCH etabliert:
- MAJOR: Inkompatible Änderungen (z.B. 2.0 statt 1.x).
- MINOR: Neue Funktionen, abwärtskompatibel (z.B. 1.5).
- PATCH: Fehlerbehebungen, abwärtskompatibel (z.B. 1.5.3).
Versionierung ist die Grundlage für Deployment und Release: Ohne saubere Versionsstände lassen sich Ausrollungen weder planen noch im Fehlerfall zurücknehmen.