# 🧭 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)