Günther Jena
Lerninhalte
Ohne Versionierungssysteme entsteht schnell Chaos

Versionierungssysteme erfüllen folgende Kernaufgaben:
Es lassen sich zwei Hauptparadigmen der Versionierung unterscheiden:
Zentrale Versionierungssysteme basieren auf einem Client-Server-Modell:
Dezentrale Versionierungssysteme basieren auf einem Peer-to-Peer-Modell:
| Kriterium | Zentrale Systeme (z. B. SVN) | Dezentrale Systeme (z. B. Git) |
|---|---|---|
| Verfügbarkeit | Server-Ausfall führt zu Stillstand | Arbeit auch offline möglich |
| Geschwindigkeit | Langsam (Netzwerkabhängig) | Schnell (lokale Operationen) |
| Backup | Single point of failure | Jedes Repository ist ein Backup |
| Komplexität | Einfacher zu verstehen | Höhere Lernkurve |
Git wurde 2005 von Linus Torvalds entwickelt, um die Versionierung des Linux-Kernels zu verbessern.
Git verwaltet Änderungen in drei Bereichen:
.git-Verzeichnis): Die dauerhaft gespeicherte VersionsgeschichteArbeitsverzeichnis --git add--> Staging Area --git commit--> Repository
Eine Änderung durchläuft somit immer beide Schritte, bevor sie dauerhaft gespeichert ist.
Der Arbeitsablauf mit Git folgt einem wiederkehrenden Muster:
git add — Änderungen in die Staging Area übernehmengit commit — Änderungen dauerhaft im lokalen Repository speicherngit push — lokale Commits zum Remote-Repository (z. B. GitHub) übertragenSchritte 1–3 werden lokal ausgeführt, eine Netzwerkverbindung ist dazu nicht erforderlich. Erst git push synchronisiert mit dem Remote-Repository.
Zur Anlage eines lokalen Repositories wird ein Projektordner benötigt. Mittels git init wird dieser zu einem Git-Repository:
git init ausführen$> git init Initialized empty Git repository in /pfad/zum/projekt/.git/
Der Befehl erstellt das .git-Verzeichnis, in dem Git die gesamte Versionsgeschichte ablegt. Dieses Verzeichnis sollte nie manuell verändert werden.
Nach dem Anlegen einer neuen Datei (z. B. index.html) zeigt git status den aktuellen Zustand des Repositories an:
$> git status On branch main No commits yet Untracked files: index.html nothing added to commit but untracked files present
git status — zeigt geänderte und neue Dateiengit diff — zeigt die genauen Änderungen im DetailIn VS Code werden Änderungen zusätzlich farblich im Explorer und in der Datei selbst markiert (grün: neue Zeilen, rot: entfernte Zeilen).
Zum dauerhaften Speichern werden Änderungen zuerst gestaged und anschließend committet:
$> git add index.html $> git commit -m "Erste Version von index.html" [main (root-commit) a1b2c3d] Erste Version von index.html 1 file changed, 12 insertions(+) create mode 100644 index.html
git add <datei> — übernimmt eine Datei in die Staging Areagit add . — übernimmt alle geänderten und neuen Dateiengit commit -m "<nachricht>" — speichert die gestagten Änderungen im RepositoryDie Commit-Nachricht sollte kurz und präzise beschreiben, welche Änderung vorgenommen wurde.
Zur Synchronisation des lokalen Repositories wird ein Remote-Repository auf GitHub benötigt:
mein-projekt).gitignore und keine Lizenz anlegen — das lokale Repository enthält bereits einen CommitNach der Anlage zeigt GitHub die URL des Repositories an (z. B. https://github.com/<benutzername>/mein-projekt.git), die für die Verbindung benötigt wird.
Zur Verbindung des lokalen Repositories mit GitHub wird die Repository-URL als Remote unter dem Namen origin registriert. Anschließend werden die lokalen Commits übertragen:
$> git remote add origin https://github.com/<benutzername>/mein-projekt.git $> git push -u origin main Enumerating objects: 3, done. Writing objects: 100% (3/3), 240 bytes | 240.00 KiB/s, done. To github.com:<benutzername>/mein-projekt.git * [new branch] main -> main
git remote add origin <url> — registriert das Remote-Repositorygit push -u origin main — überträgt den lokalen Branch main und setzt den UpstreamNach dem Push sind die Dateien und die Versionsgeschichte auf GitHub sichtbar.
| Begriff | Bedeutung |
|---|---|
| Repository | Verzeichnis mit .git-Ordner, enthält das Projekt samt Versionsgeschichte (lokal oder remote) |
| Commit | Dauerhaft gespeicherter Zustand des Projekts zu einem bestimmten Zeitpunkt |
| Branch | Parallelversion der Projektgeschichte (z. B. main, feature/login) |
| Clone | vollständige Kopie eines Remote-Repositories auf den lokalen Rechner |
| Pull | Änderungen vom Remote-Repository in das lokale Repository übernehmen |
| Push | lokale Commits zum Remote-Repository übertragen |
| Merge | zwei Branches zusammenführen |
| Fork | Kopie eines fremden Repositories unter dem eigenen GitHub-Account |
| Pull Request | Vorschlag, Änderungen aus einem Fork in das Original-Repository zu übernehmen |
Im Rahmen dieser Einheit wurden folgende Inhalte behandelt:
Nächste Schritte: