Verwenden Sie Git-Hooks, um Ihre Arbeit zu überprüfen, bevor sie Ihren Computer verlässt
Ein Git-Hook ist ein Skript, das Git zu einem festgelegten Zeitpunkt selbstständig ausführt, beispielsweise kurz vor einem Commit oder einem Push. In Preferences › Hooks zeigt GitTree, was wann ausgeführt wird. Sie können Hooks aus vorgefertigten Vorlagen hinzufügen, diese bearbeiten und testen, sie aus- und einschalten und sie über das Repository mit Ihrem Team teilen.
Funktioniert in GitTree Kostenlos: alle lokalen Git-Funktionen, kein Konto erforderlich.
Auf dieser Seite
- Bevor Sie beginnen
- Wo es zu finden ist
- Schritte
- Erwartetes Ergebnis
- Was sind Haken und warum werden sie verwendet?
- Die Haken, die Sie am häufigsten verwenden werden
- Vorgefertigte Vorlagen
- Was ein Testlauf bewirkt
- Teilen Sie Hooks mit Ihrem Team
- Hooks für einen Commit überspringen
- Wenn etwas schief geht
- Fragen
- Verwandt
Bevor Sie beginnen
- Ein Repository ist geöffnet: Hooks gehören zu einem Repository.
- Das Repository ist vertrauenswürdig. Im eingeschränkten Modus führt Git keinen seiner Hooks aus; Sie können sie weiterhin lesen und bearbeiten (Repository-Vertrauensstellung).
- Hooks sind Shell-Skripte. Die Vorlagen verwenden einfaches
sh, das macOS, Windows (bis Git for Windows) und Linux alle bereitstellen.
Wo es zu finden ist
- Das Commit-Feld: Unter der Commit-Schaltfläche listet May run: … die Hooks auf, die ein Commit ausführt. Manage Hooks öffnet die Seite.
- Tools in der Symbolleiste oder im Abschnitt TOOLS des linken Bereichs: Git hooks.
- Das Menü der Repository-Registerkarte oder die Befehlspalette: Manage Git Hooks… oder
Alt+Shift+H. - Preferences (
Mod+,) › Hooks. Wenn Sie in den Einstellungen nach „Hooks“, „pre-commit“ oder „husky“ suchen, wird es ebenfalls gefunden.
| Aktion | macOS | Windows und Linux |
|---|---|---|
| Git-Hooks verwalten | ⌥⇧H | Alt+Shift+H |
| Öffnen Sie die Einstellungen | ⌘, | Ctrl+, |
Schritte
Öffnen Sie die Hooks-Seite
Verwenden Sie Manage Hooks unter der Commit-Schaltfläche oder
Alt+Shift+H. Wenn mehrere Repositorys geöffnet sind, wählen Sie eines in Repository aus. Die Seite beginnt mit den Informationen zu Hooks, einer dreistufigen How it works-Anleitung und einem Link zu diesem Artikel.Lesen Sie, was wann läuft
What runs when zeigt den Commit-Flow (pre-commit, prepare-commit-msg, commit-msg, post-commit) und den Push-Flow (pre-push). Jeder Schritt sagt Runs, Off, Not executable oder No hook und ob er Can stop the action oder nur meldet.

Die Seite nennt die Hooks, die Git beim Commit und beim Push ausführen kann, und bietet Share Through .githooks.GitTree-Schnittstelle mit einem Demonstrations-Repository. Fügen Sie einen Haken hinzu
Drücken Sie Add Hook…. Wählen Sie unter When it runs den Haken aus; Wählen Sie unter Start from eine Vorlage aus, Git’s sample oder Empty script. Die Script-Vorschau zeigt genau, was geschrieben wird. Create Hook schreibt die Datei, bereit zur Ausführung, und öffnet sie im Editor.
Bearbeiten Sie das Skript
Edit öffnet das Skript mit Zeilennummern. Ändern Sie es und drücken Sie Save (oder
Mod+S). Wenn sich die Datei seit dem Öffnen auf der Festplatte geändert hat, lehnt GitTree das Überschreiben ab und behält Ihren Text, sodass Sie ihn erneut öffnen und vergleichen können.Machen Sie einen Probelauf
Test Run führt den Hook jetzt aus, wie Git es tun würde, ohne einen Commit oder Push durchzuführen. Geben Sie für commit-msg und prepare-commit-msg eine zu überprüfende Nachricht ein. Die Ausgabe wird eingespeist und das Ergebnis gibt an, was Git tun würde: Passed with exit code 0: Git would continue. oder Failed with exit code 1: Git would stop here. Stop beendet einen langen Lauf.
Schalten Sie einen Hook aus oder teilen Sie ihn
Der Schalter neben einem Hook schaltet ihn aus, indem er ihn in
<name>.disabledumbenennt, und wieder ein; nichts wird gelöscht. Share Through .githooks fügt die Hooks in das Repository für Ihr Team ein (siehe unten).
Erwartetes Ergebnis
Ab dem nächsten Commit oder Push führt Git die mit Runs gekennzeichneten Hooks aus. Die Zeile May run: … der Commit-Box benennt sie und die Ausgabe eines Hooks erscheint unter Hook output, wenn er etwas druckt oder den Commit stoppt.
Was sind Haken und warum werden sie verwendet?
Git sucht nach ausführbaren Dateien mit festen Namen im Hooks-Ordner (.git/hooks, sofern core.hooksPath nichts anderes angibt) und führt sie zu passenden Zeitpunkten aus. Ein Hook, der vor einer Aktion ausgeführt wird, z. B. pre-commit oder pre-push, kann diese stoppen, indem er mit einem Status ungleich Null beendet wird. Ein Hook, der danach ausgeführt wird, wie etwa post-commit oder post-merge, kann nur melden.
- Erkennen Sie Fehler, bevor sie Ihren Computer verlassen: fehlgeschlagene Tests, Flusenfehler, übrig gebliebene Konfliktmarkierungen und übergroße Dateien.
- Halten Sie Commit-Nachrichten konsistent, z. B. Conventional Commits oder einen Issue-Schlüssel in jeder Nachricht.
- Erhalten Sie in Sekundenschnelle Feedback, anstatt darauf zu warten, dass ein CI-Lauf fehlschlägt.
- Geben Sie dem gesamten Team die gleichen Kontrollen, indem Sie die Hooks im Repository belassen.
Die Haken, die Sie am häufigsten verwenden werden
| Haken | Wenn Git es ausführt | Typische Verwendung |
|---|---|---|
| pre-commit | Bevor das Commit erstellt wird | Flusen- und Schnelltests zu dem, was gestagt wird; Block-Commits auf der Hauptseite |
| prepare-commit-msg | Bevor die Nachricht geschrieben wird | Geben Sie den Problemschlüssel aus dem Zweignamen in die Nachricht ein |
| commit-msg | Nachdem die Nachricht geschrieben wurde | Überprüfen Sie das Nachrichtenformat, z. B. Conventional Commits |
| post-commit | Nachdem das Commit erstellt wurde | Benachrichtigen oder protokollieren; Der Commit kann nicht rückgängig gemacht werden |
| pre-push | Bevor etwas an das Remote gesendet wird | Führen Sie die vollständige Testsuite aus. Müll drängt in geschützte Zweige |
| post-merge | Nach einer Zusammenführung oder einem Pull | Sagen Sie, wenn sich eine Sperrdatei geändert hat, damit Abhängigkeiten neu installiert werden |
| post-checkout | Nach dem Zweigwechsel | Bereinigen Sie die Build-Ausgabe oder aktualisieren Sie generierte Dateien |
Server-Hooks wie pre-receive und update werden nur auf einem Server ausgeführt, der Pushs empfängt. GitTree listet sie auf, wenn sie vorhanden sind, führt sie jedoch nie aus.
Vorgefertigte Vorlagen
| Vorlage | Haken | Was es bewirkt |
|---|---|---|
| Hauptzweige schützen | pre-commit | Stoppt Commits, die direkt auf dem Haupt- oder Master-Server vorgenommen werden |
| Erfassen Sie Konfliktmarkierungen und Leerzeichen | pre-commit | Stoppt einen Commit, der übrig gebliebene Konfliktmarkierungen oder nachgestellte Leerzeichen hinzufügt (git diff --cached --check) |
| Blockieren Sie große Dateien | pre-commit | Stoppt einen Commit, der eine Datei mit mehr als 5 MB hinzufügt |
| Fügen Sie den Problemschlüssel hinzu | prepare-commit-msg | Beginnt jede Nachricht mit dem Problemschlüssel im Zweignamen, z. B. ABC-123 |
| Conventional Commits | commit-msg | Erfordert Zusammenfassungen wie feat(parser): accept empty lines |
| Führen Sie vor dem Push Tests durch | pre-push | Führt NPM-Test, Cargo-Test, Go-Test, Pytest oder Make-Test aus und stoppt den Push, wenn sie fehlschlagen |
| Schützen Sie entfernte Zweige | pre-push | Stoppt Pushs direkt zum Haupt- oder Masterschalter auf dem Remote |
| Abhängigkeitserinnerung | post-merge | Gibt an, wenn sich eine Sperrdatei nach einem Pull oder Merge geändert hat |
Jede Vorlage ist ein gewöhnliches Skript mit seinen Einstellungen oben, wie zum Beispiel PROTECTED="main master" oder TEST_COMMAND="". Ändern Sie sie im Editor entsprechend Ihrem Projekt.
Was ein Testlauf bewirkt
GitTree führt den Hook durch git hook run, sodass Git ihn genau so findet und startet, wie es während der eigentlichen Aktion, einschließlich core.hooksPath, der Fall wäre. Der Hook erhält eine erfundene Eingabe:
- pre-commit, pre-merge-commit, post-commit und pre-auto-gc: keine Argumente.
- commit-msg und prepare-commit-msg: eine temporäre Datei mit der von Ihnen eingegebenen Nachricht, die anschließend entfernt wird.
- pre-push: Name und URL Ihrer Push-Remote, ohne Verzweigungen in der Eingabe.
- post-merge:
0, wie nach einer normalen Zusammenführung.
Teilen Sie Hooks mit Ihrem Team
Hooks in .git/hooks werden nie committet, daher hat jeder Klon seinen eigenen. Share Through .githooks kopiert sie in einen .githooks-Ordner im Repository und legt core.hooksPath in der Konfiguration dieses Repositorys darauf fest. Übernehmen Sie den Ordner; Jeder Teamkollege führt dies dann nach dem Klonen einmal aus:
git config core.hooksPath .githooksUse This Clone’s Own Hooks entfernt diese Einstellung wieder. Der Ordner .githooks und Ihre Hooks in .git/hooks bleiben dort, wo sie sind.
Hooks für einen Commit überspringen
Öffnen Sie Commit Options im Commit-Feld und aktivieren Sie Skip Hooks (--no-verify). Git überspringt dann pre-commit und commit-msg für diesen Commit; prepare-commit-msg und post-commit laufen weiterhin, und die Zeile unter der Commit-Schaltfläche besagt dies. Um einen Haken länger zu stoppen, schalten Sie ihn auf der Seite „Hooks“ aus.
Wenn etwas schief geht
Ein Hook zeigt Not executable an und wird nie ausgeführt.
Bei macOS und Linux überspringt Git eine Hook-Datei ohne Ausführungsberechtigung. Drücken Sie Make Executable; GitTree fügt es nur dort hinzu, wo die Datei lesbar ist.
„Der Hook hat sich seit dem Öffnen auf der Festplatte geändert. Öffnen Sie ihn erneut, um den neuen Inhalt anzuzeigen.“
Ein anderes Programm oder ein Hook-Manager hat die Datei neu geschrieben. Schließen Sie den Editor, öffnen Sie ihn erneut und übernehmen Sie Ihre Änderung auf den neuen Inhalt.
„Dieser Hook ist ein Link. GitTree schreibt nie über einen Link; bearbeiten Sie die Datei, auf die er verweist.“
Der Hook ist ein symbolischer Link, der oft von einem Hook-Manager erstellt wird. Bearbeiten Sie die Datei, auf die es verweist, oder die Konfiguration dieses Tools.
Das Skript funktioniert auf macOS, schlägt jedoch auf Linux mit den Fehlern „Bad Interpreter“ oder \
fehl.
Die Datei hat Windows Zeilenenden (CRLF). Der Herausgeber warnt davor; Speichern Sie das Skript mit LF-Zeilenenden.
Test Run ist ausgegraut.
Der Grund dafür steht neben der Schaltfläche: Vertrauen Sie dem Repository, aktivieren Sie den Hook, machen Sie ihn ausführbar oder beachten Sie, dass dieser Hook nur während der tatsächlichen Git-Operation Eingaben empfängt.
Fragen
Sind Hooks Teil des kostenlosen Plans?
Ja. Das Verwalten, Bearbeiten, Testen und Teilen von Hooks erfolgt über lokales Git und erfordert kein Hosting-Konto.
Löscht GitTree einen Hook, wenn ich ihn ausschalte?
Nein. Durch das Ausschalten wird die Datei in <name>.disabled umbenannt. Durch Einschalten wird es wieder umbenannt. GitTree löscht niemals einen Hook.
Wird ein von mir erstellter Hook committet?
Nicht, solange es in .git/hooks ist. Verwenden Sie Share Through .githooks, um Hooks im Repository zu behalten, wo sie wie jede andere Datei committet werden.
Kann ein Hook in Node.js oder Python geschrieben werden?
Ja. Git führt die Datei mit dem Programm in der ersten Zeile aus, z. B. #!/usr/bin/env node; Der Editor zeigt dieses Programm als Runs with node an. Das Programm muss auf jedem Computer installiert werden, auf dem der Hook ausgeführt wird.