# 🧭 Crumbpage 12: Git - Das Gedächtnis des Waldes

**Subtitle:** *Zeitmaschinen bauen und Welten teilen*  
**Pfad:** 12 von 12  
**Schwierigkeit:** ⭐⭐⭐⭐ (4/5)  
**Zeit:** ~2 Stunden  
**Voraussetzungen:** Pfad 4 (Editoren) & Pfad 8 (SSH Keys)

> *"Wer seine Geschichte nicht kennt, ist verdammt, sie zu wiederholen. Git vergisst nichts."* 🌲

---

## 📋 Was du in diesem Pfad lernst

```
✓ Was ist Version Control? (Zeitmaschine)
✓ Repository, Commit, Push, Pull
✓ .gitignore (Was im Wald bleibt)
✓ Gitea/GitHub (Der zentrale Sammelplatz)
✓ SSH Keys für Git nutzen
```

---

## 🎯 Lernziele

Nach diesem Pfad kannst du:

- [ ] Ein Verzeichnis in ein Git-Repo verwandeln (`git init`)
- [ ] Änderungen speichern (`git commit`)
- [ ] Deinen Code auf deinen Gitea-Server hochladen (`git push`)
- [ ] Verstehen, warum `git push --force` verboten ist

---

## 🌱 Grundkonzepte

### Konzept 1: Die Zeitmaschine

Stell dir vor, du schreibst ein Buch.
- **Ohne Git:** `buch_final.txt`, `buch_final_echt.txt`, `buch_final_v2.txt` 🤯
- **Mit Git:** `buch.txt` (und Git merkt sich jede Änderung in einer Datenbank).

### Konzept 2: Lokal vs. Remote

- **Lokal:** Dein Laptop (Dein Rucksack).
- **Remote:** Dein Gitea/GitHub (Das Basislager).
Du arbeitest lokal und "pushst" (schiebst) Änderungen zum Basislager, damit andere sie "pullen" (ziehen) können.

---

## 🔧 Praktische Befehle

### Befehl 1: `git init` & `git clone`

```bash
# Neues Repo starten
$ git init

# Vorhandenes Repo herunterladen
$ git clone git@dein-gitea.com:user/repo.git
```

### Befehl 2: Der Workflow (The Happy Path)

```bash
# 1. Status prüfen (Was hat sich geändert?)
$ git status

# 2. Änderungen vormerken (Staging)
$ git add datei.txt
# oder alles: git add .

# 3. Änderungen speichern (Commit)
$ git commit -m "feat: habe kapitel 1 geschrieben"

# 4. Hochladen (Push)
$ git push origin main
```

### Befehl 3: `git log` (Geschichtsbuch)

```bash
$ git log --oneline
# Zeigt die letzten Änderungen kurz an.
```

---

## 💡 Best Practices

### DO ✅

```bash
# 1. Sprechende Commit-Messages
# Gut: "fix: login bug in auth.py"
# Schlecht: "fix", "update", "wip"

# 2. .gitignore nutzen
# Passwörter, Logs und temporäre Dateien gehören NICHT in Git!
# Erstelle eine Datei namens .gitignore und schreibe rein:
# *.log
# .env
```

### DON'T ❌

```bash
# 1. Secrets committen
# Wenn du ein Passwort committest, ist es für immer in der History.
# Auch wenn du es löschst! (Man kann in der Zeit zurückreisen).

# 2. Auf dem Server arbeiten
# Code schreibt man lokal, pusht ihn, und pullt ihn auf dem Server.
# Nicht auf dem Server via nano programmieren (außer für Hotfixes).
```

---

## 🎓 Hands-On Übungen

### Übung 1: Dein erstes Repo

1. Erstelle einen Ordner `mein-projekt`.
2. `git init`
3. Erstelle `README.md` mit etwas Text.
4. `git add README.md`
5. `git commit -m "first commit"`

### Übung 2: Ab in den Wald (Remote)

1. Erstelle ein leeres Repo auf deinem Gitea.
2. Verbinde es lokal:
   `git remote add origin git@194.164.194.191:kruemel/mein-projekt.git`
   *(Passe die URL an!)*
3. `git push -u origin main`

**Frage:** Hat es nach einem Passwort gefragt?
- **Ja:** Deine SSH Keys sind noch nicht im Gitea hinterlegt oder falsch konfiguriert.
- **Nein:** Wuhuuu! Deine Keys funktionieren! 🔑✨

---

## 🦉 Crystal Owl's Weisheit

> *"Code, der nicht in Git ist, existiert nicht. Code, der nicht gepusht ist, ist nur eine Illusion."*

---

**Navigation:**  
[← Zurück: First Access](crumbpage-11-first-access.md) | [Zurück zum Start: Admin Vektor](crumbforest-admin-vektor.md)
