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!

Der Aufstieg der technischen Macht der chinesischen Frauen im Bereich KI: Die Geschichte hinter Honors Zusammenarbeit mit Deepseek Women's Beitrag zum Technologiebereich wird immer größer. Daten des Ministeriums für Wissenschaft und Technologie Chinas zeigen, dass die Zahl der weiblichen Wissenschafts- und Technologiearbeiter enorm ist und eine einzigartige soziale Wertempfindlichkeit bei der Entwicklung von AI -Algorithmen zeigt. Dieser Artikel wird sich auf Ehren -Mobiltelefone konzentrieren und die Stärke des weiblichen Teams, die dahinter stehen, als Erster mit dem Deepseek Big Model herstellen. Am 8. Februar 2024 startete Honor offiziell das Big Model Deepseek-R1 Full-Blut-Version und war der erste Hersteller im Android Camp, der sich mit Deepseek verbindet und von den Benutzern enthusiastische Reaktion aufgebaut hat. Hinter diesem Erfolg treffen weibliche Teammitglieder Produktentscheidungen, technische Durchbrüche und Benutzer

Deepseek veröffentlichte einen technischen Artikel über Zhihu, in dem sein Deepseek-V3/R1-Inferenzsystem im Detail vorgestellt wurde, und enthüllte erstmals wichtige Finanzdaten, was die Aufmerksamkeit der Branche auf sich zog. Der Artikel zeigt, dass die tägliche Kostengewinnspanne des Systems bis zu 545%beträgt, was einen neuen hohen globalen KI -Big -Model -Gewinn darstellt. Die kostengünstige Strategie von Deepseek bietet einen Vorteil im Marktwettbewerb. Die Kosten für das Modelltraining betragen nur 1% bis 5% der ähnlichen Produkte, und die Kosten für V3-Modellschulungen beträgt nur 5,576 Mio. USD, weitaus niedriger als die seiner Konkurrenten. In der Zwischenzeit beträgt die API-Preisgestaltung von R1 nur 1/7 bis 1/2 Openaio3-Mini. Diese Daten beweisen die kommerzielle Machbarkeit der Deepseek -Technologieroute und stellen auch die effiziente Rentabilität von KI -Modellen fest.

In Kürze wird die erste Klimaanlage mit einem Deepseek Big Model - Midea Fresh and Clean Air Machine T6 ausgestattet. Diese Klimaanlage ist mit einem fortschrittlichen Luft intelligenten Fahrsystem ausgestattet, mit dem Parameter wie Temperatur, Luftfeuchtigkeit und Windgeschwindigkeit gemäß der Umgebung intelligent eingestellt werden können. Noch wichtiger ist, dass es das Deepseek Big Model integriert und mehr als 400.000 AI -Sprachbefehle unterstützt. Der Umzug von Midea hat hitzige Diskussionen in der Branche verursacht und ist besonders besorgt über die Bedeutung der Kombination von weißen Gütern und großen Modellen. Im Gegensatz zu den einfachen Temperatureinstellungen herkömmlicher Klimaanlagen kann Midea Fresh und Clean Air Machine T6 komplexere und vage Anweisungen verstehen und die Luftfeuchtigkeit intelligent an die häusliche Umgebung anpassen, wodurch die Benutzererfahrung erheblich verbessert wird.

Website -Konstruktion ist nur der erste Schritt: die Bedeutung von SEO und Backlinks Das Erstellen einer Website ist nur der erste Schritt, um sie in ein wertvolles Marketing -Asset umzuwandeln. Sie müssen die SEO -Optimierung durchführen, um die Sichtbarkeit Ihrer Website in Suchmaschinen zu verbessern und potenzielle Kunden anzulocken. Backlinks sind der Schlüssel zur Verbesserung Ihrer Website -Rankings und zeigt Google und andere Suchmaschinen die Autorität und Glaubwürdigkeit Ihrer Website an. Nicht alle Backlinks sind von Vorteil: Identifizieren und vermeiden Sie schädliche Links Nicht alle Backlinks sind von Vorteil. Schädliche Links können Ihr Ranking schädigen. Hervorragender kostenloser Backlink -Checking -Tool überwacht die Quelle der Links zu Ihrer Website und erinnert Sie an schädliche Links. Darüber hinaus können Sie auch die Linkstrategien Ihrer Wettbewerber analysieren und daraus lernen. Kostenloses Backlink -Check -Tool: Ihr SEO -Intelligenzbeauftragter

Deepseek-R1 ermöglicht die Baidu-Bibliothek und NetDisk: Die perfekte Integration von Deep Thinking and Action hat sich in nur einem Monat schnell in viele Plattformen integriert. Mit seinem kühnen strategischen Layout integriert Baidu Deepseek als Modellpartner von Drittanbietern und in sein Ökosystem, das einen großen Fortschritt in seiner ökologischen Strategie der "großen Modellsuche" erzielt. Baidu Search und Wenxin Intelligent Intelligent Platform sind die ersten, die sich mit den Deep -Suchfunktionen von Deepseek und Wenxin Big Models verbinden und den Benutzern ein kostenloses KI -Sucherlebnis bieten. Gleichzeitig integriert der klassische Slogan von "Sie werden wissen, wenn Sie zu Baidu gehen", und die neue Version der Baidu -App integriert auch die Funktionen von Wenxins großem Modell und Deepseek, wobei die "AI -Suche" und "breite Netzwerkinformationsförderung" gestartet wird.

Dieser GO-basierte Netzwerkanfälligkeitsscanner identifiziert potenzielle Sicherheitsschwächen effizient. Es nutzt die Parallelitätsfunktionen von GO und beinhaltet die Erkennung und Anfälligkeitserkennung. Erforschen wir seine Fähigkeiten und ethisch


Heiße KI -Werkzeuge

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

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

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),