In dieser Übung wenden Sie alle gelernten Git-Konzepte an, indem Sie ein kleines Python-Projekt von Grund auf mit Git verwalten.
Aufgabenstellung¶
Erstellen Sie ein Bibliotheks-Statistik-Tool, das CSV-Dateien mit Ausleihstatistiken einliest und analysiert. Versionieren Sie das gesamte Projekt mit Git und dokumentieren Sie Ihre Schritte mit mindestens 5 sinnvollen Commits.
Anforderungen¶
Das fertige Projekt soll:
CSV-Dateien mit Bibliotheksdaten einlesen
Grundlegende Statistiken berechnen (z.B. Gesamtanzahl, Durchschnitt)
Fehlerbehandlung für ungültige Dateien enthalten
Eine README-Datei haben
Eine sinnvolle
.gitignorehabenOptional: Auf GitHub/GitLab veröffentlicht werden
Schritt-für-Schritt-Anleitung¶
Schritt 1: Projektstruktur aufsetzen¶
Erstellen Sie die Basis-Projektstruktur:
# Projektordner erstellen
mkdir bibliotheks-statistik
cd bibliotheks-statistik
# Git initialisieren
git init
# Status prüfen
git status✅ Checkpoint: Sie haben ein leeres Git-Repository erstellt.
Schritt 2: README erstellen (1. Commit)¶
Erstellen Sie eine README.md:
# Bibliotheks-Statistik-Tool
Ein einfaches Python-Tool zur Analyse von Bibliotheks-Ausleihstatistiken.
## Funktionen
- CSV-Dateien einlesen
- Grundlegende Statistiken berechnen
- Fehlerbehandlung
## Verwendung
\```bash
python statistik.py daten.csv
\```
## Autor\*in
[Ihr Name]Committen Sie die README:
git add README.md
git commit -m "Initial commit: README erstellt"✅ Checkpoint: Ihr erster Commit ist erstellt!
Schritt 3: .gitignore erstellen (2. Commit)¶
Erstellen Sie eine .gitignore:
# Python
__pycache__/
*.py[cod]
*.pyc
# Virtual Environment
.venv/
venv/
# IDEs
.vscode/
.idea/
# OS
.DS_Store
# Testdaten (große Dateien)
testdaten_gross.csvCommitten Sie:
git add .gitignore
git commit -m "Gitignore für Python-Projekt hinzugefügt"Schritt 4: Grundgerüst erstellen (3. Commit)¶
Erstellen Sie statistik.py:
#!/usr/bin/env python3
"""
Bibliotheks-Statistik-Tool
Liest CSV-Dateien mit Ausleihstatistiken ein und berechnet Kennzahlen.
"""
import csv
import sys
def lies_csv(dateiname):
"""Liest eine CSV-Datei ein und gibt die Zeilen zurück."""
pass # TODO: Implementierung
def berechne_statistik(daten):
"""Berechnet Statistiken aus den eingelesenen Daten."""
pass # TODO: Implementierung
def main():
"""Hauptprogramm."""
if len(sys.argv) < 2:
print("Verwendung: python statistik.py <dateiname.csv>")
sys.exit(1)
dateiname = sys.argv[1]
print(f"Lese Datei: {dateiname}")
# TODO: Daten einlesen und analysieren
if __name__ == "__main__":
main()Committen Sie:
git add statistik.py
git commit -m "Grundgerüst mit Funktionsdefinitionen erstellt"Schritt 5: CSV-Einlesefunktion implementieren (4. Commit)¶
Erweitern Sie die lies_csv-Funktion:
def lies_csv(dateiname):
"""Liest eine CSV-Datei ein und gibt die Zeilen zurück."""
try:
with open(dateiname, 'r', encoding='utf-8') as datei:
reader = csv.DictReader(datei)
daten = list(reader)
return daten
except FileNotFoundError:
print(f"Fehler: Datei '{dateiname}' nicht gefunden.")
sys.exit(1)
except Exception as e:
print(f"Fehler beim Einlesen: {e}")
sys.exit(1)Committen Sie:
git add statistik.py
git commit -m "CSV-Einlesefunktion mit Fehlerbehandlung implementiert"Schritt 6: Testdaten erstellen¶
Erstellen Sie eine Beispiel-CSV-Datei beispiel.csv:
Datum,Ausleihen,Rueckgaben
2025-10-01,45,38
2025-10-02,52,41
2025-10-03,48,50
2025-10-04,61,55
2025-10-05,39,42Achtung: Diese Datei nicht committen – verwenden Sie .gitignore!
Fügen Sie zur .gitignore hinzu:
# Testdaten
beispiel.csvCommitten Sie nur die .gitignore:
git add .gitignore
git commit -m "Testdaten in gitignore aufgenommen"✅ Checkpoint: Sie haben gelernt, Dateien zu ignorieren!
Schritt 7: Statistik-Funktion implementieren (5. Commit)¶
Erweitern Sie die berechne_statistik-Funktion:
def berechne_statistik(daten):
"""Berechnet Statistiken aus den eingelesenen Daten."""
if not daten:
print("Keine Daten vorhanden.")
return
gesamt_ausleihen = sum(int(row['Ausleihen']) for row in daten)
gesamt_rueckgaben = sum(int(row['Rueckgaben']) for row in daten)
durchschnitt_ausleihen = gesamt_ausleihen / len(daten)
print("\n=== Statistik ===")
print(f"Anzahl Datensätze: {len(daten)}")
print(f"Gesamt-Ausleihen: {gesamt_ausleihen}")
print(f"Gesamt-Rückgaben: {gesamt_rueckgaben}")
print(f"Durchschnitt Ausleihen/Tag: {durchschnitt_ausleihen:.2f}")Und aktualisieren Sie main():
def main():
"""Hauptprogramm."""
if len(sys.argv) < 2:
print("Verwendung: python statistik.py <dateiname.csv>")
sys.exit(1)
dateiname = sys.argv[1]
print(f"Lese Datei: {dateiname}")
daten = lies_csv(dateiname)
berechne_statistik(daten)Committen Sie:
git add statistik.py
git commit -m "Statistik-Berechnung implementiert"Schritt 8: Testen¶
Testen Sie Ihr Programm:
python statistik.py beispiel.csvErwartete Ausgabe:
Lese Datei: beispiel.csv
=== Statistik ===
Anzahl Datensätze: 5
Gesamt-Ausleihen: 245
Gesamt-Rückgaben: 226
Durchschnitt Ausleihen/Tag: 49.00Schritt 9: README aktualisieren (6. Commit)¶
Erweitern Sie die README mit einem Beispiel:
# Bibliotheks-Statistik-Tool
Ein einfaches Python-Tool zur Analyse von Bibliotheks-Ausleihstatistiken.
## Funktionen
- CSV-Dateien mit Ausleihstatistiken einlesen
- Berechnung von Gesamt-Ausleihen und -Rückgaben
- Durchschnittliche Ausleihen pro Tag
- Fehlerbehandlung für fehlende oder ungültige Dateien
## Verwendung
\```bash
python statistik.py beispiel.csv
\```
## CSV-Format
Die CSV-Datei sollte folgendes Format haben:
\```csv
Datum,Ausleihen,Rueckgaben
2025-10-01,45,38
2025-10-02,52,41
\```
## Autor\*in
[Ihr Name] - Selbstlernkurs Python, HU BerlinCommitten Sie:
git add README.md
git commit -m "README mit Verwendungsbeispiel aktualisiert"Schritt 10: Historie überprüfen¶
Schauen Sie sich Ihre Arbeit an:
# Alle Commits anzeigen
git log --oneline
# Mit Graph
git log --oneline --graph --all
# Detaillierte Ansicht
git log✅ Checkpoint: Sie haben mindestens 6 sinnvolle Commits erstellt!
Optionale Erweiterungen¶
Option A: Feature-Branch für Erweiterung¶
Erstellen Sie einen Branch für eine neue Funktion:
# Branch erstellen
git checkout -b feature-visualisierung
# Neue Funktion hinzufügen (z.B. Balkendiagramm mit ASCII-Art)
# ... Code schreiben ...
# Committen
git add statistik.py
git commit -m "ASCII-Visualisierung hinzugefügt"
# Zurück zu main und mergen
git checkout main
git merge feature-visualisierung
# Branch löschen
git branch -d feature-visualisierungOption B: Auf GitHub veröffentlichen¶
Erstellen Sie ein Repository auf GitHub
Verbinden Sie Ihr lokales Repository:
git remote add origin https://github.com/ihr-username/bibliotheks-statistik.git
git branch -M main
git push -u origin mainÜberprüfen Sie auf GitHub, dass alle Commits sichtbar sind
Option C: Zusammenarbeit simulieren¶
Erstellen Sie eine zweite Änderung:
# Simulieren Sie einen anderen Computer
cd ..
git clone bibliotheks-statistik bibliotheks-statistik-klon
cd bibliotheks-statistik-klon
# Änderung machen
echo "# Todo: Tests schreiben" >> README.md
git add README.md
git commit -m "Todo-Liste zur README hinzugefügt"
# Zurück zum Original
cd ../bibliotheks-statistik
# Updates holen
git pull ../bibliotheks-statistik-klon mainBewertungskriterien¶
Überprüfen Sie selbst, ob Sie alle Anforderungen erfüllt haben:
Git-Repository initialisiert (
git init)Mindestens 5 sinnvolle Commits erstellt
Jeder Commit hat eine aussagekräftige Message
.gitignorevorhanden und sinnvoll konfiguriertREADME.md mit Projektbeschreibung vorhanden
Python-Skript funktioniert und liest CSV ein
Fehlerbehandlung implementiert
Testdaten nicht committed (in
.gitignore)Historie mit
git logüberprüft
Bonuspunkte¶
Mehr als 6 Commits mit logischer Aufteilung
Feature-Branch verwendet
Auf GitHub/GitLab veröffentlicht
Erweiterte Funktionen implementiert (z.B. verschiedene Statistiken)
Reflexion¶
Beantworten Sie für sich selbst:
Commit-Frequenz: Haben Sie oft genug committed? Waren die Commits zu groß oder zu klein?
Commit-Messages: Sind Ihre Messages aussagekräftig? Könnten Sie in 3 Monaten nachvollziehen, was Sie getan haben?
Git-Workflow: Welche Git-Befehle haben Sie am häufigsten verwendet?
Herausforderungen: Was war schwierig? Was würden Sie beim nächsten Mal anders machen?
Nutzen: Wie hat Git Ihnen bei der Entwicklung geholfen?
Musterlösung (Commit-Historie)¶
Ihre Commit-Historie sollte in etwa so aussehen:
* e7f8g9h (HEAD -> main) README mit Verwendungsbeispiel aktualisiert
* d6e7f8g Statistik-Berechnung implementiert
* c5d6e7f Testdaten in gitignore aufgenommen
* b4c5d6e CSV-Einlesefunktion mit Fehlerbehandlung implementiert
* a3b4c5d Grundgerüst mit Funktionsdefinitionen erstellt
* 92a3b4c Gitignore für Python-Projekt hinzugefügt
* 81829a3 Initial commit: README erstelltZusammenfassung¶
In dieser Übung haben Sie:
✅ Ein Repository von Grund auf erstellt
✅ Mehrere sinnvolle Commits mit guten Messages erstellt
✅ .gitignore für Python-Projekte konfiguriert
✅ Eine README für Ihr Projekt geschrieben
✅ Den gesamten Git-Workflow durchlaufen
✅ Optional: Branches verwendet oder auf GitHub veröffentlicht
Kleine Aufgabe (für den Kurs)¶
Diese Übung kann als Kleine Aufgabe für den Selbstlernkurs Python eingereicht werden. Dokumentieren Sie:
Ihre Commit-Historie (
git log --oneline)Screenshots des funktionierenden Programms
Den Link zu Ihrem GitHub-Repository (falls veröffentlicht)
Eine kurze Reflexion (3-5 Sätze): Was haben Sie gelernt? Was war herausfordernd?
Abgabeformat: PDF mit Dokumentation oder Link zum GitHub-Repository
Viel Erfolg und viel Spaß mit Git! 🎉