Git-Grundlagen

5 min 3 Abschnitte
Was du nach diesem Konzept kannst 4
  1. Du bist in der Lage, die Bedeutung von Versionskontrollsystemen zu erklären ,

    indem die Vorteile von Versionskontrolle für die Zusammenarbeit im Team, die Nachverfolgbarkeit von Änderungen und die Wiederherstellung früherer Zustände anhand konkreter Beispiele aus der Softwareentwicklung erläutert werden.

  2. Du bist in der Lage, die Verwendung der .gitignore-Datei zu erklären ,

    indem die Notwendigkeit des Ausschlusses bestimmter Dateien (z. B. Konfigurationsdateien mit Passwörtern, generierte Dateien) aus der Versionskontrolle und die Syntax der .gitignore-Datei erläutert werden.

  3. Du bist in der Lage, die grundlegenden Git-Befehle auszuführen ,

    indem ein neues Repository initialisiert, Änderungen verfolgt, Commits erstellt, Branches verwaltet und Änderungen zwischen lokalen und Remote-Repositories synchronisiert werden.

  4. Du bist in der Lage, die grundlegenden Konzepte von Git zu erklären ,

    indem die Begriffe Repository, Commit, Branch, Merge und Remote Repository sowie deren Bedeutung für die Versionskontrolle und Zusammenarbeit im Team erläutert werden.

Warum ist Versionskontrolle mit Git unverzichtbar?

Das Chaos manueller Dateiverwaltung

Stell dir vor, du entwickelst im Team eine komplexe Webseite. Ohne ein festes System speichert ihr eure Fortschritte in Dateien wie index_v1.html, index_final.html und index_wirklich_fertig.html. Wenn ihr euch diese Dateien per E-Mail zuschickt, überschreibt früher oder später jemand versehentlich den Code einer anderen Person. Zudem ist es fast unmöglich, eine fehlerhafte Änderung von letzter Woche rückgängig zu machen, da niemand mehr weiß, in welcher Datei der funktionierende Stand liegt. Ohne ein System zur Versionskontrolle enden Softwareprojekte schnell im Chaos.

Die Lösung durch Git: Nachverfolgbarkeit und Teamwork

Ein Versionskontrollsystem wie Git fungiert als detailliertes, automatisches Logbuch für dein gesamtes Projekt. Es löst die typischen Probleme der Softwareentwicklung durch drei zentrale Eigenschaften:

  • Nachverfolgbarkeit: Jede noch so kleine Code-Änderung wird mit der verantwortlichen Person und einem Zeitstempel erfasst. Du siehst exakt, wer wann welche Zeile verändert hat.
  • Wiederherstellbarkeit: Du kannst jederzeit sicher experimentieren. Bringt ein neuer Code-Block das Programm zum Absturz, springst du per Befehl zu einer früheren, funktionierenden Version zurück.
  • Zusammenarbeit: Mehrere Entwickelnde können gleichzeitig an denselben Dateien arbeiten. Git führt die unterschiedlichen Änderungen intelligent zusammen, ohne dass Arbeit verloren geht.
Git-Grundlagen — dec-software-engineering-development-environment-tools-and-frameworks-git-basics_page1.svg

Wie wendest du die Kernkonzepte und Befehle von Git an?

Das Repository: Dein Projektspeicher

Ein Repository (kurz "Repo") ist das Herzstück von Git. Es ist ein spezielles Verzeichnis, das nicht nur deine Projektdateien enthält, sondern auch die komplette Historie aller Änderungen unsichtbar im Hintergrund speichert.

Um ein völlig neues Projekt lokal auf deinem Rechner unter Versionskontrolle zu stellen, öffnest du das Terminal in deinem Projektordner und initialisierst das Repository:

git init

Möchtest du stattdessen an einem bestehenden Projekt mitarbeiten, lädst du dir eine Kopie des Repositories herunter:

git clone <url-des-repositories>

Commits: Momentaufnahmen deiner Arbeit

Ein Commit ist wie ein sicherer Speicherpunkt oder ein Schnappschuss deines Projekts zu einem bestimmten Zeitpunkt. Bevor du einen Commit erstellst, musst du Git mitteilen, welche geänderten Dateien in diesen Schnappschuss aufgenommen werden sollen (die sogenannte Staging Area).

Füge eine spezifische Datei oder alle Änderungen hinzu:

git add index.html  # Fügt eine einzelne Datei hinzu
git add .           # Fügt alle geänderten Dateien im Ordner hinzu

Anschließend erstellst du den Commit mit einer kurzen, aussagekräftigen Nachricht, die beschreibt, was du getan hast:

git commit -m "Navigation zur Startseite hinzugefügt"

Branches: Isoliertes Entwickeln

Ein Branch (Zweig) erlaubt es dir, eine parallele Entwicklungslinie zu erstellen. Das ist essenziell, um neue Funktionen (Features) zu entwickeln oder Fehler zu beheben, ohne den funktionierenden Hauptcode (meist main genannt) zu verändern oder zu beschädigen.

So erstellst du einen neuen Branch und wechselst direkt dorthin:

git branch feature/login       # Erstellt den Branch
git switch feature/login       # Wechselt in den Branch

Merge: Zweige wieder zusammenführen

Wenn du deine Arbeit in einem Branch (z. B. dem Login-Feature) erfolgreich abgeschlossen und getestet hast, möchtest du diese Änderungen in den Hauptzweig integrieren. Dieser Vorgang heißt Merge.

Dazu wechselst du zuerst zurück in den Ziel-Branch und führst dann den Merge-Befehl aus. Git fügt die Historien beider Zweige intelligent zusammen:

git switch main
git merge feature/login

Remote Repository: Synchronisation im Team

Ein Remote Repository ist eine Version deines Projekts, die auf einem Server im Internet (z. B. GitHub oder GitLab) gehostet wird. Es dient als zentraler Knotenpunkt für dein Team und visualisiert den Austausch zwischen lokalen und entfernten Speicherorten.

Um deine lokalen Commits auf den Server hochzuladen und für andere sichtbar zu machen, nutzt du:

git push

Um dir die neuesten Änderungen deiner Teammitglieder vom Server auf deinen lokalen Rechner herunterzuladen, verwendest du:

git pull
Git-Grundlagen — dec-software-engineering-development-environment-tools-and-frameworks-git-basics_page2.svg

Welche Dateien gehören nicht in die Versionskontrolle?

Warum bestimmte Dateien ignoriert werden müssen

Nicht jede Datei in deinem Projektordner sollte von Git erfasst werden. Wenn du unachtsam bist, lädst du möglicherweise sensible Daten ins Internet hoch oder blähst dein Repository unnötig auf. Folgende Dateitypen musst du zwingend aus der Versionskontrolle ausschließen:

  • Sensible Informationen: Konfigurationsdateien (wie .env), die Passwörter, API-Schlüssel oder Datenbankzugänge enthalten. Einmal hochgeladen, sind diese Daten weltweit kompromittiert!
  • Generierte Dateien: Dateien, die dein Code automatisch erstellt (z. B. kompilierte .class-Dateien oder heruntergeladene Abhängigkeiten wie der node_modules-Ordner). Sie können jederzeit aus dem Quellcode neu generiert werden.
  • Systemdateien: Versteckte Dateien deines Betriebssystems (z. B. .DS_Store bei macOS) oder persönliche Einstellungen deines Code-Editors.

Die Syntax und Anwendung der .gitignore-Datei

Um Git mitzuteilen, welche Dateien ignoriert werden sollen, erstellst du im Hauptverzeichnis deines Projekts eine reine Textdatei namens .gitignore. Git prüft diese Datei automatisch vor jedem Commit.

Die Syntax nutzt einfache Muster:

  • Dateinamen: geheim.txt ignoriert exakt diese Datei.
  • Verzeichnisse: Ein Schrägstrich am Ende (logs/) ignoriert den gesamten Ordner.
  • Wildcards (Platzhalter): Ein Sternchen * steht für beliebige Zeichen. *.log ignoriert alle Dateien, die auf ".log" enden.
  • Kommentare: Zeilen, die mit # beginnen, dienen nur der Erklärung.

Ein typisches Praxisbeispiel für ein Softwareprojekt:

# Ignoriere Zugangsdaten und lokale Umgebungsvariablen
.env
config.local.php

# Ignoriere alle Log-Dateien
*.log

# Ignoriere den Ordner mit heruntergeladenen Abhängigkeiten
node_modules/

# Ignoriere kompilierte Dateien
*.class
*.o

# Ignoriere macOS Systemdateien
.DS_Store

Teste dein Wissen

Du entwickelst mit einer Kollegin eine Website. Ihr tauscht Dateien per E-Mail aus. Welches Hauptproblem entsteht dabei ohne Versionskontrolle?

Bereit für mehr?

Thema verstanden?

Teste dein Wissen interaktiv in unserer App. 7 Tage kostenlos, dann nur 5 € im Monat.