chore: initial training material setup
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
# 📖 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 <url> 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 <hash>` 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.
|
||||
Reference in New Issue
Block a user