Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Beim Push mit Git eine Prüfung ausführen

Nach dieser Lektion: Ich kann Git eine Prüfung ausführen lassen, bevor ein Push durchgeht.

Lektion, 60 Min.13 BefehleGit-und-Gitea-Lab: clone, commit und push auf einem eigenen Git-Server lernen

Eine kaputte Änderung stoppen, bevor sie geteilt wird

Ein Bistro führt seine Preise in einer Datei. Jemand löscht aus Versehen den Teepreis und pusht. Jetzt hat das ganze Team eine kaputte Liste.

Eine Prüfung, die beim Push läuft, hätte Nein gesagt. Echte Teams nutzen solche Prüfungen den ganzen Tag.

Am Ende dieser Lektion

Notiz

Ich kann Git eine Prüfung ausführen lassen, bevor ein Push durchgeht.

Schlüsselbegriffe

BegriffWas er bedeutet
Hookein Skript, das Git zu einem festen Zeitpunkt ausführt
Prüfungein Test, der besteht oder scheitert
Exit-Statusdie Zahl, mit der ein Programm endet, 0 bei Erfolg
CIein Server, der bei jedem Push Prüfungen ausführt
Runnerdie Maschine, die die Arbeit einer CI erledigt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Hook ist ein Skript, das Git ausführt

Git sucht im Ordner .git/hooks nach Skripten mit festen Namen. Ein Skript namens pre-push läuft kurz vor einem Push. Endet es mit einem Exit-Status ungleich null, stoppt Git den Push.

Das Skript muss ausführbar sein. Hier sucht die Prüfung den Teepreis in preise.txt.

Einen gemeinsamen Ordner zum Pushen anlegen

Befehl
git init --bare -b main gemeinsam.git

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ihn in den Ordner laden klonen

Befehl
git clone gemeinsam.git laden

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Datei mit zwei Preisen anlegen

Befehl
printf 'Kaffee 1.50\nTee 1.20\n' > laden/preise.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prüfung schreiben

Befehl
printf '#!/bin/sh\ngrep -q "Tee" preise.txt || { echo "Pruefung fehlgeschlagen: Teepreis fehlt"; exit 1; }\necho "Pruefung bestanden"\n' > laden/.git/hooks/pre-push

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Prüfung ausführbar machen

Befehl
chmod +x laden/.git/hooks/pre-push

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Datei vormerken

Befehl
git -C laden add preise.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Änderung committen

Befehl
git -C laden commit -m "Preise anlegen"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Pushen und die Prüfung laufen sehen

Befehl
git -C laden push -u origin main

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine fehlgeschlagene Prüfung lehnt den Push ab

Machen Sie jetzt die Datei absichtlich kaputt. Löschen Sie die Teezeile und committen Sie. Die Prüfung scheitert, und Git lehnt den Push ab: Der kaputte Commit bleibt auf Ihrem Rechner.

Dann nehmen Sie den schlechten Commit mit git revert zurück und pushen erneut.

Die Teezeile löschen

Befehl
sed -i '/Tee/d' laden/preise.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Fehler committen

Befehl
git -C laden commit -am "Tee versehentlich entfernen"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Versuchen, ihn zu pushen

Befehl
git -C laden push

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Fehler zurücknehmen

Befehl
git -C laden revert --no-edit HEAD

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Erneut pushen

Befehl
git -C laden push

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, ein Hook gehöre zum Projekt, also habe ihn das ganze Team. Das stimmt nicht. Ein Hook liegt in .git, und ein Klon kopiert ihn nicht. Jeder kann ihn mit --no-verify überspringen. Ein Team braucht dieselbe Prüfung auf dem Server.

CI führt dieselbe Prüfung auf dem Server aus

CI heißt kontinuierliche Integration: ein Server, der bei jedem Push Prüfungen ausführt. Sie schreiben die Schritte in eine Datei, die im Repository liegt, also hat jeder Klon dieselben Regeln.

In Gitea liegt die Datei in .gitea/workflows. Der Server gibt jede Aufgabe an einen Runner. Das Ergebnis erscheint am Pull Request, und eine prüfende Person sieht einen Fehlschlag sofort.

Beispiel: eine Workflow-Datei

Zeile der DateiWas sie sagt
`name: check`der Name, den die Seite zeigt
`on: [push]`bei jedem Push ausführen
`runs-on: ubuntu-latest`die Art der Maschine
`- uses: actions/checkout@v4`zuerst die Projektdateien holen
`- run: grep -q Tee preise.txt`die Prüfung selbst, derselbe Test wie im Hook

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Das Gitea des Labs hat keinen Runner

Diese Datei tut die Arbeit des Hooks. Jeder Schritt läuft der Reihe nach, und ein Schritt, der mit einem Status ungleich null endet, lässt die Aufgabe scheitern.

Das Gitea des Labs nimmt die Datei an und verzeichnet bei jedem Push einen Lauf, aber der Lauf bleibt in der Warteschlange. Es ist kein Runner angeschlossen, also führt ihn niemand aus. Ein echtes Team schließt einen an.

Über dieses Lab und seinen Quellcode: Git-und-Gitea-Lab: clone, commit und push auf einem eigenen Git-Server lernen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.