Git
Git ist ein verteiltes Versionskontrollsystem, das 2005 von Linus Torvalds entwickelt wurde. Es ermöglicht Entwicklern, Änderungen am Quellcode zu verfolgen, verschiedene Entwicklungszweige parallel zu verwalten und effektiv im Team zusammenzuarbeiten.
Git ist heute das weltweit meistgenutzte Versionskontrollsystem und bildet die Grundlage für Plattformen wie GitHub, GitLab und Bitbucket. In der Softwareentwicklung ist Git ein unverzichtbares Werkzeug für die tägliche Arbeit.
Geschichte und Entstehung von Git
Die Geschichte von Git beginnt im April 2005 und ist eng mit der Entwicklung des Linux-Kernels verknüpft. Linus Torvalds, der Erfinder von Linux, entwickelte Git als Reaktion auf einen Lizenzstreit mit dem kommerziellen Versionskontrollsystem BitKeeper.
Torvalds hatte klare Anforderungen an das neue System: Es sollte schnell, verteilt und für die Arbeit mit großen Projekten wie dem Linux-Kernel geeignet sein. Bemerkenswert ist, dass er die erste funktionsfähige Version von Git in nur wenigen Tagen entwickelte.
Wichtige Meilensteine
- 3. April 2005: Linus Torvalds beginnt mit der Entwicklung von Git
- 7. April 2005: Erster Commit und Self-Hosting erreicht
- 18. April 2005: Erster Merge mehrerer Branches
- 26. Juli 2005: Junio Hamano übernimmt die Wartung des Projekts
- 21. Dezember 2005: Git 1.0 wird veröffentlicht
- 2008: GitHub geht online und macht Git noch populärer
- 2010er Jahre: Git wird zum De-facto-Standard für Versionskontrolle
Grundlegende Konzepte von Git
Um Git effektiv zu nutzen, musst du einige zentrale Konzepte verstehen. Diese bilden das Fundament für alle Git-Operationen.
Repository
Ein Repository (kurz: Repo) ist ein Verzeichnis, das alle Dateien deines Projekts sowie die gesamte Versionshistorie enthält. Git speichert diese Informationen in einem versteckten Ordner namens .git. Es gibt zwei Arten von Repositories:
- Lokales Repository: Befindet sich auf deinem Computer und enthält deine Arbeitskopie
- Remote Repository: Liegt auf einem Server (z.B. GitHub, GitLab) und dient der Zusammenarbeit im Team
Working Directory, Staging Area und Repository
Git arbeitet mit drei verschiedenen Bereichen, die du verstehen musst:
| Bereich | Beschreibung | Typische Aktion |
|---|---|---|
| Working Directory | Dein aktuelles Arbeitsverzeichnis mit den Dateien | Dateien bearbeiten |
| Staging Area (Index) | Zwischenspeicher für Änderungen vor dem Commit | git add |
| Repository | Permanente Speicherung der Commits | git commit |
Der typische Workflow ist: Du änderst Dateien im Working Directory, fügst sie mit git add zur Staging Area hinzu und speicherst sie mit git commit dauerhaft im Repository.
Commits
Ein Commit ist ein Snapshot deines Projekts zu einem bestimmten Zeitpunkt. Jeder Commit hat eine eindeutige ID (SHA-1-Hash), einen Autor, einen Zeitstempel und eine Commit-Nachricht. Commits sind unveränderlich und bilden die Versionshistorie deines Projekts.
Branches
Branches (Zweige) ermöglichen es dir, parallel an verschiedenen Features oder Bugfixes zu arbeiten, ohne den Hauptentwicklungszweig zu beeinträchtigen. Der Standard-Branch heißt in neueren Git-Versionen main (früher master). Du kannst beliebig viele Branches erstellen und später wieder zusammenführen (mergen).
Wichtige Git-Befehle
Git wird über die Kommandozeile (CLI) bedient. Hier sind die wichtigsten Befehle, die du für den täglichen Einsatz benötigen wirst:
Repository erstellen und konfigurieren
# Neues Repository im aktuellen Verzeichnis erstellen
git init
# Existierendes Repository klonen
git clone https://github.com/user/repository.git
# Git-Konfiguration setzen
git config --global user.name "Dein Name"
git config --global user.email "deine@email.de"
Änderungen verwalten
# Status des Repositories anzeigen
git status
# Dateien zur Staging Area hinzufügen
git add datei.txt # Einzelne Datei
git add . # Alle Änderungen
# Commit erstellen
git commit -m "Aussagekräftige Commit-Nachricht"
# Änderungen anzeigen
git diff # Nicht gestaged
git diff --staged # Gestaged
# Commit-Historie anzeigen
git log
git log --oneline # Kompakte Ansicht
Branches und Merging
# Alle Branches anzeigen
git branch
# Neuen Branch erstellen und wechseln
git checkout -b feature/neues-feature
# Oder mit neuerer Syntax:
git switch -c feature/neues-feature
# Zu einem Branch wechseln
git checkout main
git switch main
# Branch in aktuellen Branch mergen
git merge feature/neues-feature
# Branch löschen
git branch -d feature/neues-feature
Remote Repositories
# Remote-Repository hinzufügen
git remote add origin https://github.com/user/repo.git
# Remote-Repositories anzeigen
git remote -v
# Änderungen hochladen
git push origin main
# Änderungen herunterladen und mergen
git pull origin main
# Änderungen nur herunterladen (ohne Merge)
git fetch origin
Verteilte Versionskontrolle
Git ist ein verteiltes (distributed) Versionskontrollsystem. Das bedeutet, dass jeder Entwickler eine vollständige Kopie des gesamten Repositories einschließlich der kompletten Historie auf seinem Rechner hat.
Vorteile der verteilten Architektur
- Offline-Arbeit: Du kannst committen, Branches erstellen und die Historie ansehen, auch ohne Internetverbindung
- Geschwindigkeit: Alle Operationen außer Push/Pull sind lokal und daher sehr schnell
- Redundanz: Jede Kopie ist ein vollständiges Backup des Repositories
- Flexibilität: Verschiedene Workflows wie Feature-Branches oder Pull Requests werden natürlich unterstützt
Vergleich mit zentraler Versionskontrolle
| Aspekt | Git (verteilt) | SVN (zentral) |
|---|---|---|
| Repository-Kopie | Vollständig lokal | Nur Working Copy |
| Offline-Arbeit | Ja, fast alle Operationen | Nur Dateien bearbeiten |
| Branching | Schnell und leichtgewichtig | Schwerfällig |
| Geschwindigkeit | Sehr schnell | Abhängig vom Server |
| Single Point of Failure | Nein | Ja (zentraler Server) |
Diese Architektur macht Git besonders robust und flexibel. Selbst wenn der zentrale Server ausfällt, können alle Entwickler weiterarbeiten und ihre Arbeit später synchronisieren.
Git-Workflows in der Praxis
In professionellen Entwicklungsteams werden verschiedene Workflows eingesetzt, um die Zusammenarbeit zu strukturieren.
Feature-Branch-Workflow
Der Feature-Branch-Workflow ist einer der beliebtesten Ansätze. Für jedes neue Feature oder jeden Bugfix wird ein eigener Branch erstellt. Nach Fertigstellung wird der Branch über einen Pull Request (PR) oder Merge Request (MR) in den Hauptbranch integriert.
# 1. Vom main-Branch starten
git checkout main
git pull origin main
# 2. Feature-Branch erstellen
git checkout -b feature/login-formular
# 3. Änderungen vornehmen und committen
git add .
git commit -m "Login-Formular implementiert"
# 4. Branch hochladen
git push -u origin feature/login-formular
# 5. Pull Request auf GitHub/GitLab erstellen
Gitflow-Workflow
Gitflow ist ein umfangreicherer Workflow für größere Projekte mit regelmäßigen Releases. Er definiert spezielle Branches für Features, Releases und Hotfixes.
- main: Enthält nur stabile, veröffentlichte Versionen
- develop: Entwicklungszweig für das nächste Release
- **feature/***: Neue Features werden hier entwickelt
- **release/***: Vorbereitung für ein neues Release
- **hotfix/***: Dringende Bugfixes für die Produktion
Git-Hosting-Plattformen
Obwohl Git selbst keine zentrale Infrastruktur benötigt, nutzen die meisten Teams Hosting-Plattformen für die Zusammenarbeit:
- GitHub: Die größte Plattform, gehört zu Microsoft. Ideal für Open-Source-Projekte
- GitLab: Bietet integrierte CI/CD-Pipelines, auch selbst hostbar
- Bitbucket: Von Atlassian, gut integriert mit Jira und anderen Atlassian-Produkten
- Azure DevOps: Microsoft-Lösung für Unternehmen
Diese Plattformen bieten zusätzliche Features wie Pull Requests, Code Reviews, Issue-Tracking, CI/CD-Pipelines und Projektmanagement-Tools.
Git in der IT-Branche
Git ist aus der modernen Softwareentwicklung nicht mehr wegzudenken. Praktisch jedes Softwareprojekt nutzt heute Git für die Versionskontrolle. Kenntnisse in Git sind daher eine grundlegende Anforderung für alle IT-Fachkräfte, die mit Softwareentwicklung oder -administration zu tun haben.
Besonders für angehende Fachinformatiker für Anwendungsentwicklung ist Git ein essentielles Werkzeug. Aber auch Fachinformatiker für Systemintegration kommen mit Git in Berührung, etwa bei der Verwaltung von Konfigurationsdateien oder Infrastructure-as-Code.