Key Takeaways
- Git -Hooks sind einfache Skripte, die vor oder nach bestimmten Aktionen ausgeführt werden, z. Es gibt zwei Arten von Hooks: clientseitig, die auf dem System des Entwicklers ausgeführt werden, und Server-Seite, die auf dem Server mit dem Git-Repository ausführen.
- Git -Hooks werden weder mit Ihrem Projekt verteilt noch k?nnen sie automatisch installiert werden. Daher ist es vorteilhaft, einen Ort zu erstellen, an dem Ihre Hooks leben und Ihre Mitarbeiter verwenden sollen.
- Git -Hooks sind ein leistungsstarkes Mittel, um den Workflow Ihres Projekts zu automatisieren, sodass Sie Code validieren, Nachrichten festlegen, sicherstellen k?nnen, dass die Umgebung ordnungsgem?? ist und mehr.
Git -Haken sind auch für das Design extrem einfach. Git wird diese Haken ausgeführt, wenn das Skript ausführbar ist und Git zul?sst, dass die Aktion (z. B. Festschreibung oder Push) auftritt, solange der Haken ohne Fehler ausgeht (Status 0). Haken k?nnen in jeder Sprache geschrieben werden, mit der die Umgebung arbeiten kann.
Es gibt zwei Arten von Haken:
- clientseitig-diese werden auf dem System des Entwicklersystems ausgeführt
- serverseitig-diese werden auf dem Server ausgeführt, auf dem das Git-Repository
- gehostet wird
Die Hook -Dateien
Jedes Repository einschlie?lich derer, die Sie standardm??ig klonen, hat Beispielhaken im Verzeichnis .git/Hooks:
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>In diesem Verzeichnis sehen Sie so etwas wie:
applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sampleWir werden uns auf den Pre-Commit-Haken konzentrieren, der vor dem Erlauben eines Commits ausgeführt wird.
Ein Beispiel Hook: Validierung von PHP -Syntax
Wir werden mit einem sehr einfachen Haken beginnen, der in Bash geschrieben wurde und der validierende PHP -Code wird, der begangen wird, hat eine gültige Syntax. Dies soll verhindern, dass ein ?schnelles“, aber gebrochenes Commit stattfindet. Natürlich entmutige ich ?einfache Commits“, die wenig bis gar keine Tests haben, aber das bedeutet nicht, dass sie nicht passieren werden.
In .git/Hooks Wir k?nnen eine neue Datei namens Pre-Commit starten. Es muss Berechtigungen zur Ausführung haben:
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
Sie k?nnen Ihren bevorzugten Editor verwenden, um mit dem Schreiben zu beginnen. Zuerst brauchen wir den Shebang. Mein bevorzugter Weg ist es,/usr/bin/env zu verwenden, da dies den richtigen Pfad zur gewünschten Anwendung verwendet, anstatt einen hart codierten und m?glicherweise ungültigen Pfad. Im Moment werden wir es kontinuierlich scheitern lassen, damit wir leicht testen k?nnen.
applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sample
PHP hat eine nützliche Option für die Syntaxvalidierung: -l. Es dauert ein einzelnes Dateiargument, daher müssen wir alle PHP -Dateien durchlaufen, die ge?ndert werden. Der Einfachheit halber gehen wir davon aus, dass alle PHP -Dateien immer in .php enden. Da der Haken aus dem Stammwurzel des Repositorys ausgeführt wird, k?nnen wir Standard -Git -Befehle verwenden, um Informationen über die ?nderungen wie Git -Status zu erhalten.
über der #Always fehlgeschlagene Zeile k?nnen wir Folgendes verwenden, um alle PHP -Dateien zu ?ndern:
<span>cd .git/hooks </span><span>touch pre-commit </span><span>chmod +x pre-commit</span>
Erl?uterung:
- php_files = in der Bash -Zuordnung erfolgt ohne Trennzeichen. Beachten $ () ist Syntax für "Ausgabe". Anführungszeichen sind nicht erforderlich, um dies zu verwenden.
- Grep wird verwendet, um nach hinzugefügten (a) und ge?nderten Dateien (M)
- zu überprüfen awk wird hier verwendet, um $ 2 zu drucken. Ein vollst?ndiger GIT -Status -Short Line hat zu Beginn zus?tzliche Speicherplatz und zus?tzliche Daten. Daher m?chten wir das entfernen. Awk führt auch automatisch ab.
- Grep wird erneut verwendet, prüft aber jetzt, um sicherzustellen, dass die Linien in .php
- enden
<span>#!/usr/bin/env bash </span><span># Hook that checks PHP syntax </span> <span># Override IFS so that spaces do not count as delimiters </span><span>old_ifs=$IFS </span><span><span>IFS</span>=$'<span title="\n">\n'</span> </span> <span># Always fail </span><span>exit 1</span>Das mag ein bisschen seltsam erscheinen, aber! PHP -L "$ i" (beachten Sie die Zitate, um Probleme mit Leerzeichen zu vermeiden) prüft tats?chlich nach einem Rückgabewert von 0, nicht auf wahr oder einer der Werte, die wir normalerweise in anderen Sprachen erwarten. Nur als Referenz w?re der ungef?hr ?quivalente PHP -Code:
Ein
<span>php_files=<span>$(git status --short | grep -E '^(A|M)' | awk '{ print }' | grep -E '\.php$')</span></span>
Ich habe den Schleifen so früh wie m?glich das gesamte Skript beenden, und dies ist m?glicherweise nicht das, was wir wollen. Wir k?nnen in der Tat eine Zusammenfassung der Dinge wollen, anstatt weiterhin zu verpflichten. Jeder würde leicht frustriert werden und k?nnte sogar lernen, Git Commit zu verwenden-nicht verifizieren, um den Haken insgesamt zu umgehen.
<span>for file in $php_files; do </span> <span>if ! php -l "<span>$i"</span>; then </span> <span>exit 1 </span> <span>fi </span><span>done</span>Stattdessen beenden wir nicht mit PHP -L den Fehler, aber ich m?chte immer noch die Dinge leicht zu lesen halten:
Hier erfassen wir die Ausgabe für PHP -L (und erzwingen Sie die Standardfehlerausgabe für die Standardausgabe). Wir überprüfen den Exit -Status von PHP -L mit der speziellen Variablen $? (Welches ist der Exit -Status -Code) und der Operator -eq. Wir geben an, dass ein Syntaxfehler aufgetreten ist (beachten Sie die Verwendung von $ {} für eine Variable in einer Zeichenfolge). Schlie?lich geben wir die relevante Zeile für Fehler, um die Ausgabe etwas kurzer zu machen (Grepping für '^Parse ERROR'), und wir geben eine leere Linie, um dies etwas lesbarer zu halten.
Ich habe zwei schlechte Modifikationen vorgenommen und die Ausgabe für einen Versuch eines Commits sieht folgenderma?en aus:
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
Jetzt ist die Vorgehensweise, diese Probleme zu beheben, zu testen und erneut zu verpflichten.
Um das Hakenskript zu vervollst?ndigen, entfernen Sie die Ausfahrt 1 am unteren Rand des Skripts. Versuchen Sie, gültige PHP -Dateien zu begehen, und es sollte wie gewohnt funktionieren.
Teilen von Hooks
Hooks werden weder mit Ihrem Projekt verteilt noch k?nnen sie automatisch installiert werden. Ihre beste Vorgehensweise ist es also, einen Ort für Sie zu erstellen, an dem Sie Hooks leben k?nnen (k?nnte im selben Repository sein) und Ihren Mitarbeitern mitzuteilen, dass sie sie verwenden sollen. Wenn Sie dies leicht machen, tun sie dies eher.
Eine einfache M?glichkeit, dies zu tun
applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sampleJeder, der Ihr Projekt klont
Dies hat auch den Vorteil, dass Sie Ihre Haken unter der Versionskontrolle halten.
Andere Hooks
vorbereiten commit-msg-Geben Sie eine Standard-Commit-Nachricht an, wenn einer nicht angegeben ist.
- commit-MSG-Meldungsvalidierung von Commit.
- Post-Commit-l?uft nach einem erfolgreichen Commit.
- Pre-Push-L?uft, bevor Git Push nach der Fernbedienung überprüft wird, um zu arbeiten. Es dauert 2 Argumente: den Namen der Fernbedienung und die URL.
- Pre-Rebase-L?uft vor Git-Rebase.
- Post-Checkout-L?uft nach einer erfolgreichen Kasse.
- Post-Merge-L?uft nach einer erfolgreichen Zusammenführung.
- Diese Haken funktionieren im Allgemeinen genauso wie Vorkommit, obwohl sie Argumente aufnehmen. Ein Anwendungsfall für Post-Checkout besteht darin, sicherzustellen, dass eine Datei immer die richtigen Berechtigungen erh?lt (da Git nur ausführbare Dateien verfolgt, nicht ausführbarer und symbolischer Link):
Für comment-msg m?chten Sie m?glicherweise sicherstellen, dass alle Commit-Nachrichten einem Standard entsprechen, wie
<span>cd .git/hooks </span><span>touch pre-commit </span><span>chmod +x pre-commit</span>[Subproject] Nachricht
. Hier ist eins in PHP:
Schlussfolgerung<span>#!/usr/bin/env bash </span><span># Hook that checks PHP syntax </span> <span># Override IFS so that spaces do not count as delimiters </span><span>old_ifs=$IFS </span><span><span>IFS</span>=$'<span title="\n">\n'</span> </span> <span># Always fail </span><span>exit 1</span>
Git -Hooks sind ein leistungsstarkes Mittel, um den Workflow Ihres Projekts zu automatisieren. Sie k?nnen Code validieren, Nachrichten begehen, sicherstellen, dass die Umgebung ordnungsgem?? ist und noch viel mehr. Gibt es etwas Interessantes, für das Sie Git Hooks verwenden? Lassen Sie uns in den Kommentaren wissen!
h?ufig gestellte Fragen (FAQs) zu Git Hooks
Was sind die verschiedenen Arten von Git-Hooks? Client-Seiten-Hooks werden durch Operationen wie das Festlegen und Zusammenführen ausgel?st, w?hrend serverseitige Hooks bei Netzwerkoperationen wie Empfangen von Pushed-Commits ausgeführt werden. Jeder Haken kann an Ihre spezifischen operativen Anforderungen angepasst werden.
Wie erstelle ich einen Git -Hook? Hier finden Sie Beispielskripte für verschiedene Haken. Um einen neuen Hook zu erstellen, erstellen Sie eine Datei ohne Erweiterung (z. B. vor dem Unterhalt), machen Sie sie ausführbar und schreiben Sie Ihr Skript.
Wie kann ich Git -Hooks zur Automatisierung verwenden? Beispielsweise k?nnen Sie vor jedem Commit mit einem Pre-Commit-Haken automatisch Tests oder einen Schnursinter in Ihrem Code ausführen. Dies stellt sicher, dass nur getestete und ordnungsgem?? formatierte Code für das Repository verpflichtet ist.
Kann ich Git -Hooks mit meinem Team teilen? Dies liegt daran, dass sie im .git -Verzeichnis gespeichert werden, das nicht versioniert ist. Sie k?nnen sie jedoch mit Ihrem Team teilen, indem Sie sie in einem separaten Verzeichnis in Ihrem Projekt speichern und ein Skript erstellen, um sie in .git/Hooks zu symlunden.
Wie kann ich Git -Hooks verwenden, um Richtlinien durchzusetzen? >
Git -Hooks k?nnen verwendet werden, um Projekt- oder Unternehmensrichtlinien durchzusetzen. Sie k?nnen beispielsweise einen Vor-Receive-Haken auf der serverseitig verwenden, um jeden Druck abzulehnen, der Ihre Richtlinie nicht h?lt (z. B. Commits, die kein bestimmtes Format folgen).Welche Sprachen Kann ich Git -Hooks schreiben? Die Standard -Beispiele sind in Bash geschrieben, aber Sie k?nnen jede Sprache verwenden, mit der Sie sich wohl fühlen, wie Python oder Ruby. Git -Hooks k?nnen verwendet werden, um Git in andere Tools zu integrieren. Sie k?nnen beispielsweise einen Post-Commit-Hook verwenden, um einen Build in Ihrem kontinuierlichen Integrationsserver auszul?sen oder ein Ticket in Ihrem Ausgabeverfolgungssystem zu aktualisieren.
Wie kann ich einen Git-Hook debuggen? Das Debuggen eines Git -Hooks kann durch das Schreiben von Informationen in eine Datei aus dem Hook -Skript geschrieben werden. Zum Beispiel k?nnen Sie die Ausgabe von Befehlen in eine Protokolldatei umleiten, um sie sp?ter zu überprüfen.
Kann ich Git -Hooks ignorieren? Mit dem Befehl Git Commit k?nnen Sie die Option –no-ush-Option verwenden. Dies kann nützlich sein, wenn Sie an einer geringfügigen ?nderung arbeiten, bei der die in Ihren Hooks implementierten Schecks nicht erforderlich sind. sind m?chtig, sie sollten mit Vorsicht verwendet werden. Ein schlecht geschriebener Haken kann Probleme verursachen, einschlie?lich der Ablehnung aller Commits oder sogar Datenverlust. Testen Sie Ihre Haken immer gründlich, bevor Sie sie bereitstellen.
Das obige ist der detaillierte Inhalt vonEine Einführung in Git -Hooks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen





Ob es ihm gef?llt oder nicht, künstliche Intelligenz ist Teil des t?glichen Lebens geworden. Viele Ger?te-einschlie?lich elektrischer Rasierer und Zahnbürsten-sind KI-betrieben.

Ein neues Modell für künstliche Intelligenz (KI) hat gezeigt, dass die F?higkeit, wichtige Wetterereignisse schneller und mit gr??erer Pr?zision vorherzusagen als einige der am h?ufigsten verwendeten globalen Vorhersagesysteme

Je pr?zise wir versuchen, KI -Modelle zu funktionieren, desto gr??er werden ihre Kohlenstoffemissionen - mit bestimmten Aufforderungen, die bis zu 50 -mal mehr Kohlendioxid erzeugen als andere, laut einer kürzlich durchgeführten Studie.

KI -Modelle für künstliche Intelligenz (KI) k?nnen Menschen bedrohen und erpressen, wenn ein Konflikt zwischen den Zielen des Modells und den Benutzerentscheidungen besteht

Das Hauptanliegen bei Big Tech, das mit künstlicher Intelligenz (KI) experimentiert, ist es nicht, dass es die Menschheit dominieren k?nnte. Das eigentliche Problem liegt in den anhaltenden Ungenauigkeiten von Gro?sprachmodellen (LLMs) wie der Open AI -Chatgpt, Googlees Gemini und Google

Je fortgeschrittener künstlicher Intelligenz (KI) wird, desto mehr "halluzinieren" und liefern falsche oder ungenaue Informationen.

Argumentationsmodelle für künstliche Intelligenz (KI) sind nicht ganz so f?hig, wie sie erscheinen. In Wirklichkeit wird ihre Leistung vollst?ndig zusammengefasst, wenn die Aufgaben zu komplex werden, so Forscher von Apple. Verarbeitung von Modellen wie Anthropics Claude, offen, offen

Die britische National Crime Agency (NCA) hat vier Personen verhaftet, die der Beteiligung an den Cyber-Angriffen auf Markierungen und Spencer (M & S), Co-op und Harrods.According zu einer Erkl?rung verd?chtigen, zwei 19-j?hrige M?nner, ein 17-j?hriger O-o
