Updated admin-vektor index and fixed linear navigation links. The Crystal Owl approves. 🦉
152 lines
3.5 KiB
Markdown
152 lines
3.5 KiB
Markdown
# 🧭 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) | [Weiter: Pipes & Filters →](crumbpage-13-pipes-filters.md)
|