Für Lehrende in der Softwareentwicklung ist die Verwaltung von Assignments und Feedback im großen Maßstab eine der größten logistischen Herausforderungen. Wie gibt man vielen Studierenden Zugang zu Kursmaterialien, hält Musterlösungen privat und liefert trotzdem kontextbezogenes, aussagekräftiges Feedback – ohne übermäßigen Verwaltungsaufwand?
Das GitLab for Education-Programm stellt qualifizierten Bildungseinrichtungen kostenlosen Zugang zu GitLab Ultimate bereit. Damit können Lehrende professionelle Workflows aufbauen, die reale Softwareentwicklungsumgebungen abbilden. Stephen G. Dame, Lehrbeauftragter an der University of Washington mit langjähriger Erfahrung als leitender Softwareingenieur bei Boeing Commercial Airplanes, nutzt genau diese Workflows – vom Kursmaterial bis zum Studierendenfeedback, über mehrere Lehrveranstaltungen hinweg.
Von der Luft- und Raumfahrt in den Hörsaal
Dame brachte aus seiner Zeit bei Boeing umfangreiche GitLab-Erfahrung mit in die Hochschullehre. Als früher Fürsprecher von GitLab an seiner Universität trat er dem GitLab for Education-Programm bei, um Zugang zum vollständigen Feature-Set für strukturierte, skalierbare Kurs-Workflows zu erhalten.
„GitLab bietet die beste Möglichkeit, mehrere Kurse, studentische Assignments, Vorlesungen und Code-Beispiele über Groups und Subgroups zu organisieren – eine Funktion, die ich in dieser Form bei anderen Repository-Plattformen nicht gefunden habe."
– Stephen G. Dame, University of Washington, Bothell
Groups aufsetzen: Die richtige Struktur vor der ersten Codezeile
Die Grundlage eines effektiven GitLab-basierten Kurses ist eine durchdachte Group-Hierarchie. GitLabs Groups und Subgroups ermöglichen es Lehrenden, die natürliche Struktur einer Hochschule – Institution, Kurs und Rolle – mit präzisen, vererbbaren Berechtigungen auf jeder Ebene abzubilden.
Dames Struktur platziert die Universität als Wurzel (UWTeaching), jeder
Kurs erhält eine eigene Subgroup (z. B. css430). Innerhalb jedes Kurses
befinden sich Repositories für lecture-materials und code sowie
dedizierte Subgroups für students und graders. Unterrichtsmaterialien
bleiben privat; Studierenden- und Grader-Subgroups sind mit kontrollierten
Berechtigungen konfiguriert, sodass Aufgabenstellungen und Musterlösungen
nur den richtigen Personen zugänglich sind.

Berechtigungen werden über Manage > Members durch die Hierarchie
weitergegeben. Dame fügt Studierende mit Reporter-Zugriff und einem
Ablaufdatum zum Ende der Lehrperiode zur students-Subgroup des jeweiligen
Kurses hinzu. Studierende können Assignment-Repositories klonen und pullen,
aber nicht pushen – Musterlösungen bleiben fest unter der Kontrolle der
Lehrenden.
Studierende richten SSH-Schlüssel in all ihren Arbeitsumgebungen (lokale
Rechner, Cloud-Shells, virtuelle Maschinen) ein, um Repositories zu klonen
und wöchentliche Updates via git pull zu erhalten. Sie kopieren relevanten
Code in eigene private Repositories, um ihre eigene Versionshistorie zu
verwalten.
Hinweis für große Lehrveranstaltungen: Bei größeren Kohorten ist das manuelle Hinzufügen von Studierenden unpraktisch. GitLabs REST-API ermöglicht die Automatisierung von Subgroup-Erstellung und Mitgliedschaft aus einer Liste von Benutzernamen. Hier ein Beispiel-Python-Skript:
import gitlab
from datetime import datetime
# Verbindung zur GitLab-Instanz herstellen
gl = gitlab.Gitlab('https://gitlab.com', private_token='YOUR_PRIVATE_TOKEN')
# ID der übergeordneten Group (z. B. die ID für "css430 > students")
parent_group_id = 12345678
# Ablaufdatum: typischerweise Beginn des nächsten Monats nach Ende der Lehrperiode
expiry_date = '2025-01-01'
# Liste der gesammelten Studierenden-Benutzernamen
student_list = ['alice_css430', 'bob_css430', 'carol_css430', 'dave_css430', 'eve_css430']
for username in student_list:
try:
# 1. Persönliche Subgroup für Studierende erstellen
subgroup = gl.groups.create({
'name': username,
'path': username,
'parent_id': parent_group_id,
'visibility': 'private'
})
# 2. Studierende mit Ablaufdatum zur neuen Subgroup hinzufügen
user = gl.users.list(username=username)[0]
subgroup.members.create({
'user_id': user.id,
'access_level': gitlab.const.REPORTER_ACCESS,
'expires_at': expiry_date
})
print(f"Erfolg: Subgroup erstellt und Studierende/r hinzugefügt für {username}")
except Exception as e:
print(f"Fehler bei der Verarbeitung von {username}: {e}")
Darüber hinaus gibt es ein von GitLab veröffentlichtes Open-Source-Projekt zur Automatisierung der Kursverwaltung, das zusätzliche Werkzeuge für diesen Workflow bereitstellt.
Feedback dort geben, wo die Arbeit wirklich stattfindet
Sobald die Struktur steht, zeigt sich der eigentliche Mehrwert von GitLab im Feedback-Workflow. Dame bittet Studierende, Assignments durch Öffnen eines Merge Requests in ihrem Repository einzureichen. Das gibt Lehrenden sofort einen sauberen Diff von allem, was die Studierenden geschrieben haben.

Lehrende können auf jede Codezeile klicken und einen Inline-Kommentar hinterlassen – nicht nur um zu markieren, was falsch ist, sondern um zu erklären, warum, und um auf den nächsten Schritt hinzuweisen. Studierende erhalten dieses Feedback direkt im Kontext ihres Codes – deutlich handlungsrelevanter als ein Kommentar am Ende eines eingereichten Dokuments.
GitLab for Education nutzen
Die Einrichtung des ersten GitLab-Assignments erfordert anfänglichen Aufwand, läuft danach aber weitgehend von selbst. Der eigentliche Mehrwert geht über die Organisation hinaus: Studierende schließen ihr Studium ab, nachdem sie täglich in einer Umgebung gearbeitet haben, die professionelle Softwareentwicklung abbildet – und dabei Gewohnheiten rund um Versionskontrolle und Code-Review nicht als abstrakte Konzepte kennenlernen, sondern praktisch einüben.
Empfehlenswert ist ein einfacher Einstieg: eine einzelne Kurs-Group, ein Assignment-Template, eine grundlegende Pipeline. Die Struktur wächst natürlich mit der Erfahrung auf der Plattform.
Für GitLab for Education anmelden, um Zugang zu allen Top-Tier-Funktionen zu erhalten – darunter unbegrenzte Reviewer bei Merge Requests, zusätzliche Compute-Minuten und erweiterter Speicherplatz.





