Aufgaben-Python/lehrpfad_2_oop_einstieg/04c_git_und_versionskontrolle/index.html

231 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapitel 04c: Git & Versionskontrolle</title>
<link rel="stylesheet" href="../../assets/style.css">
</head>
<body>
<header>
<div class="header-container">
<nav class="nav-links">
<a href="../../index.html">🏠 Zur Kursübersicht</a>
<span>&rsaquo;</span>
<a href="../04b_umstieg_vscode/index.html">Kapitel 04b</a>
<span>&rsaquo;</span>
<span style="color: white; font-weight: 600;">Kapitel 04c (Git)</span>
<span>&rsaquo;</span>
<a href="../05_objekte_kombinieren/index.html">Kapitel 05 &rarr;</a>
</nav>
<div class="header-badge">Versionskontrolle &bull; Profi-Werkzeug</div>
<h1>Git &amp; Versionskontrolle: Deine Programmier-Zeitmaschine 🌿⏱️</h1>
<p>Lerne, wie du deinen Code versionierst, Spielstände sicherst und Änderungen in VS Code &amp; im Terminal verwaltest.</p>
</div>
</header>
<main class="container">
<!-- 📂 Schnellzugriff & Download aller Dateien dieser Einheit -->
<div style="background: #ffffff; border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 14px 20px; margin-bottom: 25px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; box-shadow: var(--shadow-sm);">
<div style="font-weight: 700; color: var(--text-main); display: flex; align-items: center; gap: 8px;">
<span>📂 Dateien dieser Einheit:</span>
</div>
<div style="display: flex; gap: 10px; flex-wrap: wrap;">
<a href="README.md" class="btn btn-secondary" style="padding: 6px 14px; font-size: 0.88rem;">📖 README.md</a>
</div>
</div>
<!-- 1. Was ist Git? -->
<section class="card">
<h2>1. Was ist Git und warum braucht es jede(r) Entwickler(in)?</h2>
<p>
Hast du schon mal Dateien so genannt wie <code><a href="git_uebung.py" style="color: inherit; text-decoration: underline;">git_uebung.py</a></code>, <code>aufgabe_final.py</code>, <code>aufgabe_final2_wirklich_fertig.py</code>? 😅
Genau dieses Chaos verhindert <strong>Git</strong>!
</p>
<div class="box box-analogie">
<div class="box-title">🎮 Die Spielstand- &amp; Zeitmaschinen-Analogie:</div>
<ul>
<li><strong>Ein Commit ist wie ein Speicherpunkt in einem Computerspiel:</strong> Wenn du vor einem Bosskampf stehst (oder eine neue Funktion ausprobierst) und dein Code kaputtgeht, kannst du mit einem Klick genau zu diesem perfekten Zustand zurückreisen!</li>
<li><strong>Git dokumentiert die Geschichte:</strong> Du siehst immer genau, wer wann welche Zeile verändert hat und warum.</li>
</ul>
</div>
</section>
<!-- 2. Die 3 Zonen von Git -->
<section class="card">
<h2>2. Der Git-Lebenszyklus: Die 3 Stationen eines Codes</h2>
<p>Wenn du Code in Git sicherst, durchläuft er drei Stationen:</p>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 15px; margin: 20px 0;">
<div style="background: #ffffff; border: 2px solid var(--border-color); border-radius: var(--radius-sm); padding: 16px;">
<div style="font-size: 1.5rem; margin-bottom: 6px;">📝</div>
<h4 style="color: var(--text-main); margin-bottom: 4px;">1. Arbeitsbereich (Working Tree)</h4>
<p style="font-size: 0.88rem; color: var(--text-muted); margin: 0;">Du tippst und speicherst deine Dateien ganz normal im Editor.</p>
</div>
<div style="background: #ffffff; border: 2px solid var(--primary); border-radius: var(--radius-sm); padding: 16px;">
<div style="font-size: 1.5rem; margin-bottom: 6px;">📦</div>
<h4 style="color: var(--primary); margin-bottom: 4px;">2. Bereitstellung (Staging Area)</h4>
<p style="font-size: 0.88rem; color: var(--text-muted); margin: 0;">Mit <code>git add .</code> wählst du aus, welche Dateien in den nächsten Spielstand gepackt werden.</p>
</div>
<div style="background: #ffffff; border: 2px solid var(--success); border-radius: var(--radius-sm); padding: 16px;">
<div style="font-size: 1.5rem; margin-bottom: 6px;">💾</div>
<h4 style="color: var(--success); margin-bottom: 4px;">3. Commit (Speicherpunkt)</h4>
<p style="font-size: 0.88rem; color: var(--text-muted); margin: 0;">Mit <code>git commit -m "..."</code> schnürst du das Paket fest und gibst ihm eine aussagekräftige Nachricht.</p>
</div>
</div>
<div class="box box-tipp">
<div class="box-title">🚀 Der letzte Schritt: <code>git push</code> (In die Cloud laden):</div>
Mit <code>git push</code> schickst du deine lokalen Commits an den Git-Server (z.B. dein Aufgaben-Repository), damit dein Lehrer oder dein Nachhilfelehrer deinen Code einsehen kann.
</div>
</section>
<!-- 3. Git in VS Code nutzen -->
<section class="card">
<h2>3. 🖥️ Git visuell in VS Code bedienen</h2>
<p>
Du musst Befehle nicht zwingend im Terminal tippen – VS Code hat eine fantastische <strong>Quellcodeverwaltung</strong> eingebaut:
</p>
<ol style="margin-left: 20px;">
<li style="margin-bottom: 10px;">
Drücke <kbd>Strg</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd> (Mac: <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd>) oder klicke links auf das <strong>Ast-/Verzweigungs-Symbol</strong> (Quellcodeverwaltung).
</li>
<li style="margin-bottom: 10px;">
<strong>Änderungen sehen (Diff):</strong> Klicke auf eine geänderte Datei. VS Code öffnet einen geteilten Bildschirm: Links siehst du den alten Code (rot) und rechts deinen neuen Code (grün)!
</li>
<li style="margin-bottom: 10px;">
<strong>Stagen:</strong> Klicke neben der Datei auf das <strong><code>+</code>-Symbol</strong> (Staged Changes).
</li>
<li style="margin-bottom: 10px;">
<strong>Committen:</strong> Tippe oben ins Textfeld eine kurze Nachricht (z.B. <em>"Löse Aufgabe in Kapitel 05"</em>) und klicke auf das blaue Häkchen <strong>&check; Commit</strong>.
</li>
<li style="margin-bottom: 10px;">
<strong>Pushen:</strong> Klicke auf den blauen Button <strong>"Sync Changes"</strong> oder unten links auf das Wolken-/Drehsymobl. Fertig! 🎉
</li>
</ol>
</section>
<!-- 4. Terminal Cheat Sheet -->
<section class="card">
<h2>4. ⌨️ Das Git-Terminal Cheat-Sheet</h2>
<p>Wenn du lieber im Terminal arbeitest (<kbd>Strg</kbd> + <kbd>`</kbd>), sind das die 5 wichtigsten Befehle deines Entwickler-Lebens:</p>
<table style="width: 100%; border-collapse: collapse; margin: 15px 0;">
<thead>
<tr style="background: var(--primary-light); text-align: left;">
<th style="padding: 10px; border: 1px solid var(--border-color);">Befehl</th>
<th style="padding: 10px; border: 1px solid var(--border-color);">Was er macht</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>git status</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Zeigt an, welche Dateien geändert oder neu erstellt wurden.</td>
</tr>
<tr style="background: #fafafa;">
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>git add .</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Packt alle aktuellen Änderungen in die Staging-Area.</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>git commit -m "Text"</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Erstellt einen neuen Speicherpunkt mit deiner Nachricht.</td>
</tr>
<tr style="background: #fafafa;">
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>git push</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Lädt alle neuen Commits auf den Server hoch.</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid var(--border-color);"><code>git log --oneline</code></td>
<td style="padding: 10px; border: 1px solid var(--border-color);">Zeigt die Liste aller bisherigen Commits kurz und übersichtlich.</td>
</tr>
</tbody>
</table>
</section>
<!-- 5. Was ist .gitignore -->
<section class="card">
<h2>5. 🙈 Was ist die <code>.gitignore</code>-Datei?</h2>
<p>
Nicht jede Datei soll in Git gespeichert werden (z.B. temporäre Cache-Dateien wie <code>__pycache__</code> oder Passwörter).
In einer Textdatei namens <code>.gitignore</code> im Hauptordner schreibt man Dateinamen auf, die Git einfach <strong>vollständig ignorieren</strong> soll.
</p>
<div class="code-container">
<div class="code-header">
<span>Beispiel: Typische .gitignore für Python</span>
</div>
<pre><code>__pycache__/
*.pyc
.DS_Store
.venv/</code></pre>
</div>
</section>
<!-- 6. Mitmach-Experiment -->
<section class="card">
<h2>6. 🧪 Dein Git-Mitmach-Check</h2>
<p>Öffne die Datei <code>04c_git_und_versionskontrolle/git_uebung.py</code> und führe deinen ersten eigenen Commit durch:</p>
<ul class="task-list">
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="g1">
<label for="g1" class="task-label">
<strong>Schritt 1:</strong> Öffne <code>git_uebung.py</code> und ändere deinen Namen oder die Grußnachricht. Speichere mit <kbd>Strg</kbd> + <kbd>S</kbd>.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="g2">
<label for="g2" class="task-label">
<strong>Schritt 2:</strong> Öffne links den Git-Tab (<kbd>Strg</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd>) und klicke auf <code>git_uebung.py</code>, um den Unterschied (Diff) zu sehen.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="g3">
<label for="g3" class="task-label">
<strong>Schritt 3:</strong> Erstelle im Git-Tab einen Commit mit der Nachricht <em>"Mein erster eigener Git-Commit!"</em>.
</label>
</li>
<li class="task-item">
<input type="checkbox" class="task-checkbox" id="g4">
<label for="g4" class="task-label">
<strong>Schritt 4:</strong> Führe im Terminal <code>git log --oneline -n 3</code> aus, um deinen neuen Commit in der Historie zu bewundern!
</label>
</li>
</ul>
<div class="box box-success">
<div class="box-title">🏆 Bravo! Du beherrschst nun echte Entwickler-Tools!</div>
Ab jetzt kannst du jedes gelöste Kapitel wie ein Profi committen. Weiter geht's mit Kapitel 05 (Objekte kombinieren)!
</div>
<div class="footer-nav">
<a href="../04b_umstieg_vscode/index.html" class="btn btn-secondary">&larr; Zurück zu Kapitel 04b: VS Code</a>
<a href="../05_objekte_kombinieren/index.html" class="btn">Weiter zu Kapitel 05: Komposition &rarr;</a>
</div>
</section>
</main>
<!-- Lokale Gamification-Scripts (funktionieren auch offline per Doppelklick via file://) -->
<script src="../../assets/gamification_data.js"></script>
<script src="../../assets/gamification.js"></script>
<script src="../../assets/parsons.js"></script>
<script src="../../assets/interpreter.js"></script>
</body>
</html>