Zum Inhalt springen
GitTree
Änderungen und Commits

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.

KostenlosAktualisiert

Funktioniert in GitTree Kostenlos: alle lokalen Git-Funktionen, kein Konto erforderlich.

Auf dieser Seite
  1. Bevor Sie beginnen
  2. Wo es zu finden ist
  3. Schritte
  4. Erwartetes Ergebnis
  5. Was sind Haken und warum werden sie verwendet?
  6. Die Haken, die Sie am häufigsten verwenden werden
  7. Vorgefertigte Vorlagen
  8. Was ein Testlauf bewirkt
  9. Teilen Sie Hooks mit Ihrem Team
  10. Hooks für einen Commit überspringen
  11. Wenn etwas schief geht
  12. Fragen
  13. 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.
AktionmacOSWindows und Linux
Git-Hooks verwalten⌥⇧HAlt+Shift+H
Öffnen Sie die Einstellungen⌘,Ctrl+,

Schritte

  1. Ö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.

  2. 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.

    Präferenzen-Hooks für Lumen, wobei „Was wann ausgeführt wird“ und der Hook „commit-msg“ als nicht ausführbar markiert sind
    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.
  3. 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.

  4. 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.

  5. 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.

  6. Schalten Sie einen Hook aus oder teilen Sie ihn

    Der Schalter neben einem Hook schaltet ihn aus, indem er ihn in <name>.disabled umbenennt, 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

Gängige clientseitige Hooks
HakenWenn Git es ausführtTypische Verwendung
pre-commitBevor das Commit erstellt wirdFlusen- und Schnelltests zu dem, was gestagt wird; Block-Commits auf der Hauptseite
prepare-commit-msgBevor die Nachricht geschrieben wirdGeben Sie den Problemschlüssel aus dem Zweignamen in die Nachricht ein
commit-msgNachdem die Nachricht geschrieben wurdeÜberprüfen Sie das Nachrichtenformat, z. B. Conventional Commits
post-commitNachdem das Commit erstellt wurdeBenachrichtigen oder protokollieren; Der Commit kann nicht rückgängig gemacht werden
pre-pushBevor etwas an das Remote gesendet wirdFühren Sie die vollständige Testsuite aus. Müll drängt in geschützte Zweige
post-mergeNach einer Zusammenführung oder einem PullSagen Sie, wenn sich eine Sperrdatei geändert hat, damit Abhängigkeiten neu installiert werden
post-checkoutNach dem ZweigwechselBereinigen 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

Vorlagen in Hook hinzufügen
VorlageHakenWas es bewirkt
Hauptzweige schützenpre-commitStoppt Commits, die direkt auf dem Haupt- oder Master-Server vorgenommen werden
Erfassen Sie Konfliktmarkierungen und Leerzeichenpre-commitStoppt einen Commit, der übrig gebliebene Konfliktmarkierungen oder nachgestellte Leerzeichen hinzufügt (git diff --cached --check)
Blockieren Sie große Dateienpre-commitStoppt einen Commit, der eine Datei mit mehr als 5 MB hinzufügt
Fügen Sie den Problemschlüssel hinzuprepare-commit-msgBeginnt jede Nachricht mit dem Problemschlüssel im Zweignamen, z. B. ABC-123
Conventional Commitscommit-msgErfordert Zusammenfassungen wie feat(parser): accept empty lines
Führen Sie vor dem Push Tests durchpre-pushFührt NPM-Test, Cargo-Test, Go-Test, Pytest oder Make-Test aus und stoppt den Push, wenn sie fehlschlagen
Schützen Sie entfernte Zweigepre-pushStoppt Pushs direkt zum Haupt- oder Masterschalter auf dem Remote
Abhängigkeitserinnerungpost-mergeGibt 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 .githooks

Use 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.