# 📖 Trainerhandbuch Dieses Dokument richtet sich an Personen, die diese Git-Schulung durchführen. Es enthält Hinweise zur Vorbereitung, typische Stolpersteine und Vorschläge für Diskussionen. --- ## Vorbereitung vor der Schulung ### Checkliste (30 Minuten vorher) - [ ] Repo geklont oder frisch aufgesetzt: `git clone git-schulung` - [ ] Eigene Git-Konfiguration geprüft: `git config --list` - [ ] Test-Remote-Repository angelegt (leer, für Modul 05) - [ ] Terminal / Git Bash geöffnet und getestet - [ ] Projektor / Bildschirmübertragung eingerichtet - [ ] Alle Teilnehmenden haben Git installiert (Modul 00 vorab schicken) - [ ] Backup-Plan: USB-Stick mit Git-Installer für alle gängigen Betriebssysteme ### Empfohlene Werkzeuge am Rechner des Trainers - Git (aktuell) - VS Code mit GitLens-Extension (gute Visualisierung) - Browser mit GitHub/GitLab Account --- ## Zeitplan und Pausen | Modul | Dauer | Pause danach | |-------|-------|-------------| | 00 – Vorbereitung | 10 min | – | | 01 – Grundkonzepte | 15 min | **5 min Pause** | | 02 – Erste Schritte | 15 min | – | | 03 – Branches | 15 min | **10 min Pause** | | 04 – Konflikte | 15 min | – | | 05 – Remote & PRs | 10 min | – | | 06 – Cheatsheet + Q&A | 10 min | Ende | **Gesamt:** ca. 90 Minuten mit Pausen, 70 Minuten ohne. --- ## Typische Stolpersteine bei Anfängern ### 1. Detached HEAD **Was passiert:** Jemand hat direkt einen alten Commit mit `git checkout ` ausgecheckt. **Was Git sagt:** ```text HEAD detached at a3f9c12 ``` **Lösung:** ```bash git switch main ``` **Erklärung für Teilnehmende:** "HEAD" ist wie ein Lesezeichen. Normalerweise zeigt es auf einen Branch-Namen (wie `main`). Im "Detached HEAD"-Zustand zeigt es direkt auf einen Commit – kein Branch wird bewegt. Mit `git switch main` befestigst du das Lesezeichen wieder am richtigen Branch. --- ### 2. Falscher Branch **Was passiert:** Jemand macht einen Commit auf `main`, obwohl er auf einem Feature-Branch sein wollte. **Lösung (wenn noch nicht gepusht):** ```bash git switch -c feature/mein-feature # Branch erstellen (nimmt den Commit mit) git switch main git reset --hard HEAD~1 # Commit von main entfernen ``` **Einfachere Lösung:** `git cherry-pick` erwähnen als Hinweis, nicht als Pflicht. --- ### 3. Commit-Nachricht vergessen / schlecht **Was passiert:** `git commit` ohne `-m` öffnet den Editor. Viele Anfänger wissen nicht, wie sie ihn schließen. **Nano:** `Ctrl+O`, Enter, `Ctrl+X` **Vim:** `i` zum Editieren, `Esc`, dann `:wq` und Enter **Empfehlung:** Immer `-m "..."` verwenden, bis der Workflow sitzt. --- ### 4. Tippfehler in Branch-Namen **Was passiert:** `git switch feautre/login` → Fehler. **Lösung:** ```bash git branch -m feautre/login feature/login # Branch umbenennen ``` --- ### 5. Staging Area vergessen **Was passiert:** Jemand ruft `git commit -m "..."` auf, obwohl nichts gestagtet ist. **Git sagt:** ```text nothing to commit, working tree clean ``` **Erinnerung:** Immer `git status` vor `git commit` schauen! --- ### 6. Merge-Konflikt-Panik **Was passiert:** Jemand sieht Konfliktmarker zum ersten Mal und weiß nicht, was zu tun ist. **Tipp:** Ruhig bleiben. `git merge --abort` als Notausgang zeigen. Erklären, dass der Konflikt nur in der Datei ist – nichts ist kaputt. --- ## Diskussionsfragen pro Modul ### Nach Modul 01 - "Warum macht eine Staging Area Sinn? Wann würdet ihr nicht alle Änderungen in einen Commit packen?" ### Nach Modul 02 - "Wie oft sollte man committen? Nach jeder Zeile? Nach jedem Feature?" - "Was ist eine gute Commit-Nachricht? Zeigt ein Beispiel aus eurem Alltag." ### Nach Modul 03 - "Wann würdet ihr einen Branch anlegen? Immer? Nur bei größeren Features?" - "Was ist der Unterschied zwischen Branch und Fork?" ### Nach Modul 04 - "Was passiert, wenn zwei Leute gleichzeitig dieselbe Datei ändern – wer 'gewinnt'?" - "Könnt ihr euch einen Fall vorstellen, wo ein Fast-Forward unerwünscht wäre?" ### Nach Modul 05 - "Was ist der Vorteil eines Pull Requests gegenüber direktem Push auf main?" - "Wer sollte einen PR reviewen? Wie lange darf ein PR offen bleiben?" --- ## Repo für die nächste Schulung frisch machen Führe das Reset-Skript aus: ```bash bash reset-uebung.sh ``` Das Skript entfernt alle Übungsordner, die Teilnehmende angelegt haben, und stellt sicher, dass das Schulungs-Repo sauber ist. Lies das Skript vorher kurz durch, um sicherzugehen, dass es in deiner Umgebung korrekt funktioniert. --- ## Häufige Fragen (FAQ) **Frage:** "Kann ich Git auch ohne GitHub nutzen?" **Antwort:** Ja! Git ist lokal. GitHub ist nur eine Hosting-Plattform. Du brauchst GitHub erst für Remote-Repos und Zusammenarbeit. **Frage:** "Was ist der Unterschied zwischen Git und GitHub?" **Antwort:** Git ist das Werkzeug (lokal installiert). GitHub ist ein Dienst im Internet, der Git-Repos hostet und zusätzliche Funktionen (PRs, Issues, Actions) bietet. **Frage:** "Was ist ein 'origin'?" **Antwort:** Ein Kurzname für das Remote-Repo – per Konvention heißt das erste Remote immer `origin`. Du könntest es auch `meinserver` nennen.