{"id":66691,"date":"2023-11-14T11:12:31","date_gmt":"2023-11-14T10:12:31","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=66691&#038;preview=true&#038;preview_id=66691"},"modified":"2023-11-17T08:41:29","modified_gmt":"2023-11-17T07:41:29","slug":"git-hooks","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/","title":{"rendered":"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices"},"content":{"rendered":"<p>Git muss nicht komplex sein, aber es gibt bestimmte Aspekte, die kompliziert sind und ein tieferes Verst\u00e4ndnis erfordern &#8211; Git Hooks zum Beispiel. Das sind Skripte, die Git bei bestimmten Ereignissen automatisch ausf\u00fchrt.<\/p>\n<p>Sie k\u00f6nnen zwar einfach sein, aber du hast viel mehr M\u00f6glichkeiten, sie effektiv zu nutzen. Daf\u00fcr musst du jedoch alle R\u00e4dchen im Getriebe verstehen.<\/p>\n<p>In diesem Beitrag befassen wir uns mit fortgeschrittenen Techniken f\u00fcr Git-Hooks, die einige Grundlagen beinhalten, wie man sie erstellt und installiert und vieles mehr.<\/p>\n<p>Au\u00dferdem erkl\u00e4ren wir Hook-Parameter und Umgebungsvariablen, geben Tipps und Tricks, gehen auf Fehlerbehebungsmethoden ein und behandeln viele weitere Themen.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Die Grundlagen von Git Hooks: Eine Fibel<\/h2>\n<p>Eine der wichtigsten Funktionen <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">von Git<\/a> sind seine Hooks: ein leistungsf\u00e4higer Mechanismus, mit dem du Aufgaben automatisieren, Standards durchsetzen und konsistente Arbeitsabl\u00e4ufe \u00fcber den gesamten Lebenszyklus eines Projekts hinweg sicherstellen kannst.<\/p>\n<p>Git-Hooks sind Skripte, die automatisch an bestimmten Punkten im Git-Workflow ausgef\u00fchrt werden. Du kannst sie verwenden, um das Verhalten von Git an die Bed\u00fcrfnisse deines Projekts anzupassen und zu erweitern. Hooks sorgen daf\u00fcr, dass die Qualit\u00e4t des Codes erhalten bleibt, Tests durchgef\u00fchrt und Verteilungen reibungslos organisiert werden.<\/p>\n<p>Git bietet verschiedene Arten von Hooks, die jeweils in unterschiedlichen Phasen des Git-Workflows ausgel\u00f6st werden k\u00f6nnen:<\/p>\n<ul>\n<li><b>Pre-commit.<\/b> Diese Hooks werden ausgef\u00fchrt, bevor du einen Commit abschlie\u00dft. So kannst du Code-Stile durchsetzen, Tests ausf\u00fchren oder auf Syntaxfehler pr\u00fcfen.<\/li>\n<li><b>Post-commit.<\/b> Sie werden ausgef\u00fchrt, nachdem du einen Commit erstellt hast. Er ist n\u00fctzlich f\u00fcr Benachrichtigungen oder <a href=\"https:\/\/kinsta.com\/de\/blog\/git-fortgeschritten\/\">Logging<\/a>.<\/li>\n<li><b>Pre-push.<\/b> Dieser Hook wird ausgel\u00f6st, bevor du den <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-man-code-auf-github-veroeffentlicht\/\">Code ver\u00f6ffentlichst<\/a>, und erm\u00f6glicht es dir, Integrationstests durchzuf\u00fchren, die Kompatibilit\u00e4t zu pr\u00fcfen oder die Qualit\u00e4t sicherzustellen.<\/li>\n<li><b>Post-Push.<\/b> Der letzte Hook l\u00e4uft, nachdem du einen Push durchgef\u00fchrt hast. Er ist n\u00fctzlich, um den Code in die Produktion zu \u00fcberf\u00fchren oder die Dokumentation zu aktualisieren.<\/li>\n<\/ul>\n<p>Du findest die Hooks im Verzeichnis <code>.git\/hooks<\/code> deines Git-Repositorys. Dort gibt es auch Beispiel-Hooks, die du als Vorlagen f\u00fcr deine eigenen Skripte verwenden kannst. Die Hooks decken eine Reihe von Aktionen ab und sind mit dem Pr\u00e4fix <b>sample-<\/b>\u00a0gekennzeichnet:<\/p>\n<figure id=\"attachment_166981\" aria-describedby=\"caption-attachment-166981\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-166981 size-full\" title=\"Sample Hooks Directory\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/sample-hooks-directory.png\" alt=\"Ein macOS Finder-Bildschirm, der ein lokales Verzeichnis mit 13 wei\u00dfen Sample-Hooks-Dateien auf grauem Hintergrund zeigt.\" width=\"1000\" height=\"644\"><figcaption id=\"caption-attachment-166981\" class=\"wp-caption-text\">Ein lokales Git-Verzeichnis mit Beispiel-Hooks-Dateien<\/figcaption><\/figure>\n<p>Hooks werden bei verschiedenen Git-Aktionen ausgel\u00f6st. Ein Pre-Commit-Hook wird zum Beispiel ausgef\u00fchrt, wenn du \u00c4nderungen \u00fcbertr\u00e4gst, und ein Pre-Push-Hook wird ausgel\u00f6st, bevor du einen <a href=\"https:\/\/kinsta.com\/de\/blog\/git-vs-github\/\">Push an eine andere Stelle sendest<\/a>. Sobald du mehr \u00fcber diese Ausl\u00f6ser wei\u00dft, kannst du Hooks strategisch einsetzen, um die Qualit\u00e4tskontrolle zu verbessern und deinen Arbeitsablauf zu optimieren.<\/p>\n<h2>So erstellst und installierst du benutzerdefinierte Git-Hooks<\/h2>\n<p>Das Erstellen und Installieren von benutzerdefinierten Git-Hooks kann ein komplexer Prozess sein. Aber die Grundlagen, die du hier lernst, werden dich sp\u00e4ter bei der Entwicklung fortgeschrittener Hooks unterst\u00fctzen. Gehen wir ein paar Konzepte durch, die f\u00fcr jeden Hook gelten, den du erstellst und installierst.<\/p>\n<h3>Auswahl eines geeigneten Hook-Typs<\/h3>\n<p>Die Wahl des richtigen Hook-Typs f\u00fcr deinen speziellen Anwendungsfall ist ein wichtiger erster Schritt. Du kannst damit beginnen, indem du deinen eigenen Arbeitsablauf und deine Bed\u00fcrfnisse kennst. Hier ist eine kurze Checkliste mit \u00dcberlegungen zu diesem Thema:<\/p>\n<ul>\n<li>Betrachte zun\u00e4chst die verschiedenen Phasen deines Prozesses, wie z. B. die <a href=\"https:\/\/kinsta.com\/de\/blog\/git-fuer-die-webentwicklung\/\">Codierung, die Tests und die Bereitstellung<\/a>. Finde au\u00dferdem heraus, wo dieser Prozess von einer <a href=\"https:\/\/kinsta.com\/de\/changelog\/kinsta-api\/\">Automatisierung<\/a> und Kontrolle profitieren k\u00f6nnte.<\/li>\n<li>Finde dann die Stellen in deinem Arbeitsablauf, an denen h\u00e4ufig Fehler oder Unstimmigkeiten auftreten. Benutzerdefinierte Git-Hooks k\u00f6nnen hier helfen. Wenn du zum Beispiel vergisst, die Tests vor einem Commit auszuf\u00fchren, kann ein Pre-Commit-Hook das Problem beheben.<\/li>\n<li>Als N\u00e4chstes \u00fcberlegst du dir, wann du den Hook innerhalb deines Workflows ausf\u00fchren m\u00f6chtest. Wenn du zum Beispiel sicherstellen willst, dass alle Commits den <a href=\"https:\/\/kinsta.com\/de\/blog\/bewaehrte-html-praktiken\/\">Coding-Standards<\/a> entsprechen, ist ein Pre-Commit-Hook angebracht. Wenn du <a href=\"https:\/\/kinsta.com\/de\/blog\/code-review-tools\/\">den Code validieren<\/a> willst, bevor du ihn an die Gegenstelle sendest, ist ein Pre-Push-Hook besser geeignet.<\/li>\n<li>Schlie\u00dflich musst du sicherstellen, dass der von dir gew\u00e4hlte Hook-Typ mit deiner Entwicklungsumgebung und den von dir verwendeten Tools kompatibel ist. \u00dcberlege dir, welche <a href=\"https:\/\/kinsta.com\/de\/blog\/skriptsprachen\/\">Skriptsprache<\/a> du f\u00fcr den Hook verwendest und in welcher Umgebung er ausgef\u00fchrt werden soll.<\/li>\n<\/ul>\n<p>An diesem Punkt solltest du in der Lage sein, klare Ziele f\u00fcr deinen Hook zu definieren. Es kann sogar sein, dass jedes Ziel eine andere Art von Hook erfordert. Es ist zwar verlockend, Skripte f\u00fcr alle m\u00f6glichen Szenarien zu erstellen, aber es ist eine gute Idee, sich zuerst auf die kritischen Punkte zu konzentrieren.<\/p>\n<h3>Benennung und Platzierung von benutzerdefinierten Git-Hooks<\/h3>\n<p>Die richtige Benennung und Platzierung von benutzerdefinierten Git Hooks ist entscheidend f\u00fcr ihre Funktionalit\u00e4t und Wartbarkeit. Wie die Funktionen, Dateien, Klassennamen und vieles mehr in deinem Code sollten auch deine Git Hooks eine einheitliche und aussagekr\u00e4ftige Namenskonvention haben.<\/p>\n<p>Wenn die Hooks im Laufe der Zeit mehrere Projekte unterst\u00fctzen, solltest du Pr\u00e4fixe verwenden &#8211; vielleicht mit den Initialen des Entwicklers, einer Abteilung oder einem Firmennamen. In der Regel verwenden Git-Hooks Kleinbuchstaben und Bindestriche, um die Lesbarkeit zu verbessern &#8211; z. B. <b>my-project-pre-commit<\/b>.<\/p>\n<p>W\u00e4hrend du Git-Hooks im Verzeichnis <b>.git\/hooks<\/b> deines Projektarchivs speichern kannst, sollten <i>benutzerdefinierte<\/i> Hooks in einem separaten Verzeichnis im Stammverzeichnis des Projekts abgelegt werden. So verhinderst du, dass sie bei einem Git-Update versehentlich \u00fcberschrieben werden. Du solltest jedoch eine <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-versionskontrolle\/\">Versionskontrolle<\/a> f\u00fcr diese Hooks zusammen mit dem restlichen Code deines Projekts einrichten.<\/p>\n<h3>So erstellst du einen einfachen benutzerdefinierten Git-Hook<\/h3>\n<p>Um einen einfachen Git-Hook zu erstellen, legst du in der Regel eine neue Datei mit dem Namen des gew\u00fcnschten Hooks (z. B. <b>pre-commit<\/b>) in deinem Hooks-Verzeichnis an. Wir werden die Hook-Namen sp\u00e4ter auflisten, wenn wir \u00fcber Parameter sprechen.<\/p>\n<p>Bevor du eine Datei \u00f6ffnest, um mit ihr zu arbeiten, solltest du sicherstellen, dass sie mit dem folgenden Befehlszeilen-Snippet ausf\u00fchrbar ist:<\/p>\n<pre><code class=\"language-bash\">chmod +x path\/to\/file\/hook-name<\/code><\/pre>\n<p>Denk daran, unsere Platzhalter durch die richtigen Informationen zu ersetzen. Wir werden im Laufe des Beitrags immer wieder auf dieses Snippet verweisen, da es eine typische Aktion sein sollte, wenn du einen neuen Git-Hook erstellst.<\/p>\n<p>Sobald die Datei ausf\u00fchrbar und ge\u00f6ffnet ist, f\u00fcgst du deine eigene Logik in deiner bevorzugten Skriptsprache hinzu. Das kann Bash, <a href=\"https:\/\/kinsta.com\/de\/blog\/python-tutorials\/\">Python<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/ruby-on-rails-vs-node-js\/\">Ruby<\/a> oder eine andere sein. Die Erstellung solcher Skripte w\u00fcrde den Rahmen dieses Artikels sprengen. Sp\u00e4ter gibt es jedoch einige Pseudocode-Beispiele, um bestimmte Anwendungsf\u00e4lle und Szenarien zu veranschaulichen.<\/p>\n<p>Bevor du \u00c4nderungen \u00fcbertr\u00e4gst, solltest du deinen Hook testen, indem du versuchst, die entsprechende Aktion (z. B. eine \u00dcbertragung) auszuf\u00fchren. Dies ist der grundlegende Ansatz f\u00fcr die Erstellung von Git-Hooks, aber es gibt auch viele fortgeschrittene Anwendungsf\u00e4lle. Darauf gehen wir als N\u00e4chstes ein.<\/p>\n<h2>Erstellen und Installieren von fortgeschrittenen Custom Hooks<\/h2>\n<p>Das Erstellen einfacher Git-Hooks wirst du im Laufe deiner Entwicklungskarriere h\u00e4ufig tun. Es gibt jedoch viele Situationen, in denen du fortgeschrittenere und komplexere Hooks brauchst. Im Folgenden sehen wir uns einige Anwendungsf\u00e4lle und Beispiel-Hooks f\u00fcr verschiedene g\u00e4ngige Szenarien an.<\/p>\n<h3>Einen Hook erstellen, der den Code-Stil mit Linters erzwingt<\/h3>\n<p>Die Verwendung eines Linters zur Durchsetzung von Code-Styling ist eine fantastische Anwendung f\u00fcr Git-Hooks. Er kann dazu beitragen, eine einheitliche Codequalit\u00e4t in deinem Repository aufrechtzuerhalten, und ist etwas, von dem du viel profitieren kannst.<\/p>\n<p>Nat\u00fcrlich solltest du einen Linter w\u00e4hlen, der zu der Programmiersprache deines Projekts passt. <a href=\"https:\/\/pypi.org\/project\/black\/\" target=\"_blank\" rel=\"noopener noreferrer\">Black<\/a> ist zum Beispiel fantastisch f\u00fcr Python. Wir werden hier <a href=\"https:\/\/eslint.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ESLint<\/a> f\u00fcr JavaScript verwenden, um einen Pre-Commit-Hook zu erstellen.<\/p>\n<p>Installiere zun\u00e4chst den Linter als globales oder lokales Paket in deinem Projekt. Daf\u00fcr brauchst du <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a> und <a href=\"https:\/\/www.npmjs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">npm<\/a>:<\/p>\n<pre><code class=\"language-bash\">npm install eslint --save-dev<\/code><\/pre>\n<p>Als N\u00e4chstes navigierst du zu deinem Hooks-Verzeichnis in deinem Repo. Erstelle deine Pre-Commit-Datei und schreibe dann ein Skript, das den Linter auf deine bereitgestellten Dateien anwendet. Der Hook sollte den Commit verhindern, wenn der Linter irgendwelche Probleme findet. Hier ist ein grobes Beispiel:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/sh\n\n# Stash unstaged changes (optional but recommended)\ngit stash -q --keep-index\n\n# Run the linter on staged files\nnpm run lint # Replace with the appropriate linting command\nLINT_RESULT=$?\n\n# Unstash the stashed changes (optional but recommended)\ngit stash pop -q\n\n# Exit with the linter's exit code\nexit $LINT_RESULT<\/code><\/pre>\n<p>Sobald du sichergestellt hast, dass der Hook ausf\u00fchrbar ist, teste ihn mit einem Commit. Der Pre-Commit-Hook sollte den Linter ausf\u00fchren. Wenn es Verst\u00f6\u00dfe gegen den Code-Stil gibt, kannst du den Commit nicht abschlie\u00dfen, bis du die Probleme behoben hast.<\/p>\n<p>Nat\u00fcrlich solltest du einen Hook schreiben, der mit deiner eigenen <a href=\"https:\/\/kinsta.com\/de\/blog\/beste-programmiersprache-lernen-sollte\/\">Programmiersprache<\/a> und deinem Linter funktioniert, je nach Projekt. Du k\u00f6nntest dieses Beispiel z. B. mit Linter-Konfigurationseinstellungen erweitern, es in deinen Build-Prozess integrieren und vieles mehr.<\/p>\n<h3>Implementiere einen Hook f\u00fcr die Ausf\u00fchrung von Tests vor einem Commit<\/h3>\n<p>Die Implementierung eines Pre-Commit-Hooks zur Ausf\u00fchrung von Tests vor einem Commit ist eine hervorragende M\u00f6glichkeit, um potenzielle Probleme fr\u00fchzeitig zu erkennen. So kannst du sicherstellen, dass du nur zuverl\u00e4ssigen Code \u00fcbergibst.<\/p>\n<p>F\u00fcr dieses Beispiel verwenden wir das <a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jest Testing Framework<\/a> f\u00fcr JavaScript. Du solltest (wie immer) etwas Passendes f\u00fcr dein Projekt installieren:<\/p>\n<pre><code class=\"language-bash\">npm install jest --save-dev<\/code><\/pre>\n<p>Wie bei jedem Hook navigierst du zu deinem Hooks-Verzeichnis, erstellst eine neue Datei, benennst sie und machst sie ausf\u00fchrbar. Von hier aus schreibst du ein Skript, das vor dem Commit Tests f\u00fcr alle bereitgestellten Dateien durchf\u00fchrt. Hier ist eine grobe Vorlage:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/sh\n\n# Stash unstaged changes (optional but recommended)\ngit stash -q --keep-index\n\n# Run tests on staged files\nnpm test # Replace with the appropriate test command\nTEST_RESULT=$?\n\n# Unstash the stashed changes (optional but recommended)\ngit stash pop -q\n\n# Exit with the test's exit code\nexit $TEST_RESULT<\/code><\/pre>\n<p>Wenn du versuchst, \u00c4nderungen zu \u00fcbertragen, f\u00fchrt der Hook deine Tests f\u00fcr die bereitgestellten Dateien aus. Bei fehlgeschlagenen Tests wird die \u00dcbertragung abgebrochen, und du solltest die Probleme beheben, bevor du die \u00dcbertragung erneut durchf\u00fchrst.<\/p>\n<h3>Entwickle einen Hook f\u00fcr die Automatisierung von Versionierung und Markierung<\/h3>\n<p>Eine hervorragende M\u00f6glichkeit, den Freigabeprozess zu rationalisieren, ist die Automatisierung der Versionskontrolle und des Taggings in Git. So stellst du eine konsistente Versionierung deiner gesamten Codebasis sicher.<\/p>\n<p>W\u00e4hle zun\u00e4chst ein f\u00fcr dein Projekt geeignetes Versionsschema. Das w\u00fcrde den Rahmen dieses Artikels sprengen, aber g\u00e4ngige Schemata sind Semantic Versioning (SemVer) oder ein benutzerdefiniertes Versionierungsmuster.<\/p>\n<p>Als N\u00e4chstes musst du entscheiden, was dein Hook genau tun soll. Er k\u00f6nnte zum Beispiel die aktuelle Version lesen, sie nach einem bestimmten Schema erh\u00f6hen und die notwendigen Dateien mit der neuen Version aktualisieren. Au\u00dferdem solltest du ein Skript schreiben, das auf Basis der Version Tags erstellt und Git-Befehle verwendet, um leichtgewichtige oder mit Anmerkungen versehene Tags zu erstellen.<\/p>\n<p>Sobald du die Berechtigungen f\u00fcr deine Datei erstellt und festgelegt hast, kannst du damit beginnen, deinen Hook zu schreiben. Das kann ein komplexer und sehr spezifischer Hook sein, der sich sogar von Projekt zu Projekt \u00e4ndern kann. Die meisten Hooks dieser Art enthalten jedoch Folgendes:<\/p>\n<ul>\n<li>Eine Funktion, die einen bestimmten Teil eines Versionsstrings (z. B. <code>1.2.3<\/code>) erh\u00f6ht und die neue Version zur\u00fcckgibt.<\/li>\n<li>Die M\u00f6glichkeit, die aktuelle Version aus einer speziellen Versionsdatei zu lesen.<\/li>\n<li>Eine Funktion, die die neue Versionsnummer berechnet und angibt, welcher Teil inkrementiert werden soll. Zum Beispiel: <code>0<\/code> f\u00fcr Major, <code>1<\/code> f\u00fcr Minor, <code>2<\/code> f\u00fcr Patch.<\/li>\n<\/ul>\n<p>Von hier aus sollte das Skript die Versionsdatei mit der neuen Nummer aktualisieren, ein leichtgewichtiges Tag mit der neuen Version erstellen und optional das neue Tag in ein entferntes Repository pushen. Sobald du die \u00c4nderungen \u00fcbertr\u00e4gst, sorgt der Hook daf\u00fcr, dass jede \u00dcbertragung mit der richtigen Version und dem richtigen Tag verkn\u00fcpft wird.<\/p>\n<p>Du wirst diesen Hook wahrscheinlich noch weiter an die Anforderungen deines Projekts anpassen wollen. So k\u00f6nntest du z. B. die Erstellung der ersten Tags, den Umgang mit Versionskonflikten und die Aktualisierung von Versionsverweisen in Dateien \u00fcbernehmen.<\/p>\n<h2>Hook-Parameter und Umgebungsvariablen verstehen<\/h2>\n<p>Ein Grund, warum Git Hooks so leistungsf\u00e4hig sind, ist die Art und Weise, wie sie mit dynamischen Variablen umgehen. Das kann jedoch ein komplexes Konzept sein, das es zu verstehen gilt. Im Folgenden werden wir uns sowohl die Umgebungsvariablen als auch die Hook-Parameter ansehen &#8211; und mit letzteren beginnen.<\/p>\n<h3>Wie Parameter an Hooks \u00fcbergeben werden<\/h3>\n<p>Hooks k\u00f6nnen bestimmte Parameter von Git erhalten, um auf kontextbezogene Informationen aus deiner Hauptcodebasis zuzugreifen. Git setzt die Parameter zur Laufzeit automatisch, und obwohl du sie in den meisten F\u00e4llen nicht definieren musst, kann es sein, dass du sie angeben musst. Es ist wichtig, diese zu verstehen, um effektive Hooks zu entwickeln.<\/p>\n<p>Hier ist ein \u00dcberblick \u00fcber die wichtigsten Parameter f\u00fcr Hooks:<\/p>\n<ul>\n<li>Git-Hooks verwenden Positionsvariablen, wobei sich <code>$1<\/code> auf den ersten Parameter bezieht, <code>$2<\/code> auf den zweiten Parameter und so weiter. Diese Parameter sind nicht willk\u00fcrlich; sie haben bestimmte Bedeutungen und Zwecke. Sie sind zwar nicht &#8222;offiziell&#8220;, stellen aber akzeptierte Konventionen f\u00fcr den Zugriff auf die Werte von Parametern dar.<\/li>\n<li>Die Reihenfolge der Parameter folgt einem bestimmten Muster. Git \u00fcbergibt diese Parameter in einer bestimmten Reihenfolge an dein Hook-Skript, die sich aus dem Kontext des Hook-Ereignisses ergibt.<\/li>\n<li>Die Variablennamen spiegeln den allgemeinen Zweck der Parameter wider. Zum Beispiel enth\u00e4lt <code>$1<\/code> oft den Pfad zu einer Datei, w\u00e4hrend <code>$2<\/code> die Quelle einer Aktion sein kann.<\/li>\n<\/ul>\n<p>Wenn du einen Parameter hinzuf\u00fcgst, den der Hook nicht aufrufen kann, kann das Skript ihn in der Regel nicht verwenden. Parameter sind spezifisch f\u00fcr einen bestimmten Hook und Ausf\u00fchrungskontext. Um Probleme zu vermeiden, solltest du nur dokumentierte Parameter verwenden. Du <i>kannst<\/i> jedoch den Wert eines Positionsparameters einer anderen Variablen zuweisen und ihn dann in deinem Skript verwenden:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/sh\n\n# Assign $1 to the variable EXAMPLE\nEXAMPLE=$1\n\n# Use EXAMPLE variable\necho \"The commit message file is: $EXAMPLE\"<\/code><\/pre>\n<p>In diesem Fall hat die Variable <code>EXAMPLE<\/code> denselben Wert wie <code>$1<\/code>, n\u00e4mlich den Pfad zur Datei der \u00dcbergabemeldung. Wenn du jedoch die dokumentierten Variablennamen verwendest, wird dein Code verst\u00e4ndlicher.<\/p>\n<p>Beachte, dass du in manchen F\u00e4llen die <a href=\"https:\/\/www.computerhope.com\/jargon\/s\/stdin.htm\">Standardeingabe (<code>stdin<\/code>)<\/a> verwendest, um Parameter zu definieren. In diesem Fall solltest du diese Elemente in deine Hooks einbauen.<\/p>\n<h4>Git Hook Parameterwerte und Definitionen finden<\/h4>\n<p>Da jeder Git-Hook seine eigenen Parameter hat, brauchst du wahrscheinlich eine Referenz, um herauszufinden, welche Parameter f\u00fcr deine spezielle Anwendung gelten. Die gute Nachricht ist, dass es mehrere M\u00f6glichkeiten gibt, dies zu tun.<\/p>\n<p>In der offiziellen <a href=\"https:\/\/git-scm.com\/docs\/githooks\" target=\"_blank\" rel=\"noopener noreferrer\">Git-Hook-Dokumentation<\/a> findest du zum Beispiel einige der g\u00e4ngigsten Parameter. Am besten ist es jedoch, wenn du einen der Git-Hooks als Beispiel \u00f6ffnest. Diese bestehen aus einem Mini-Leitfaden, der dir zeigt, wie du den Hook skriptest und der auch die Parameterdefinitionen f\u00fcr dich enth\u00e4lt:<\/p>\n<figure id=\"attachment_166982\" aria-describedby=\"caption-attachment-166982\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-166982 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/sample-git-hook.png\" alt=\"Ein Beispiel f\u00fcr eine Git-Hook-Datei in NeoVim auf macOS. Es zeigt einen kommentierten Abschnitt, der erkl\u00e4rt, wie man den Hook kodiert, zusammen mit den entsprechenden Parametern, die darin verwendet werden k\u00f6nnen. Es gibt auch einen Teil des Bash-Codes f\u00fcr den Hook.\" width=\"1000\" height=\"785\"><figcaption id=\"caption-attachment-166982\" class=\"wp-caption-text\">Eine Beispiel-Git-Hook-Datei in NeoVim<\/figcaption><\/figure>\n<p>Sie eignen sich hervorragend, um sich mit Git-Hooks vertraut zu machen, und helfen dir vielleicht sogar dabei, sie zu kodieren.<\/p>\n<h3>Umgebungsvariablen<\/h3>\n<p>Git-Hooks k\u00f6nnen Argumente aus der Befehlszeile und von <code>stdin,<\/code> abrufen, wie wir bereits besprochen haben. Sie k\u00f6nnen aber auch Argumente aus der Umgebung selbst abrufen, wenn diese in einer <code>bash<\/code> Shell l\u00e4uft.<\/p>\n<p>Mit diesen <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-eine-umgebungsvariable\/\">Umgebungsvariablen<\/a> kannst du das Verhalten deiner Git-Hooks anpassen und Entscheidungen auf der Grundlage verschiedener Aspekte des Git-Workflows treffen. Auf diese Weise kannst du dynamische und kontextabh\u00e4ngige Git-Hooks erstellen. Du kannst sie zum Beispiel verwenden, um Commit-Nachrichten zu \u00fcberpr\u00fcfen, den Zugriff auf bestimmte Zweige zu kontrollieren oder benutzerdefinierte Aktionen auf der Grundlage der Identit\u00e4t des Autors auszul\u00f6sen.<\/p>\n<p>Alle Umgebungsvariablen aufzulisten, w\u00fcrde den Rahmen dieses Beitrags sprengen. Wir empfehlen dir, die <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Git-Internals-Environment-Variables\" target=\"_blank\" rel=\"noopener noreferrer\">Git-Dokumentation<\/a> und die Beispiel-Hooks zu lesen, um herauszufinden, welche Variablen verwendet werden.<\/p>\n<h3>Testen der Werte von Umgebungsvariablen<\/h3>\n<p>Git setzt normalerweise automatisch verschiedene Umgebungsvariablen, je nachdem, welchen Hook es aufruft. Das kann zu Problemen f\u00fchren, wenn du nicht wei\u00dft, was gesetzt wird. Nimm zum Beispiel das folgende Ergebnis f\u00fcr die Variable <code>GIT_REFLOG_ACTION<\/code> f\u00fcr die Hooks &#8222;pre-rebase&#8220; und &#8222;post-merge&#8220;:<\/p>\n<ul>\n<li><code>pre-rebase<\/code>. <code>GIT_REFLOG_ACTION=rebase<\/code><\/li>\n<li><code>post-merge<\/code>. <code>GIT_REFLOG_ACTION=\u2019pull other master\u2019<\/code><\/li>\n<\/ul>\n<p>Zum Gl\u00fcck gibt es eine M\u00f6glichkeit zu <a href=\"https:\/\/longair.net\/blog\/2011\/04\/09\/missing-git-hooks-documentation\/\">testen, wie Git mit Umgebungsvariablen umgeht<\/a>, indem du ein kleines Snippet in deinem Hook verwendest:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\n\necho Running $BASH_SOURCE\nset | egrep GIT\necho PWD is $PWD<\/code><\/pre>\n<p>Um den Code zusammenzufassen: Zeile zwei gibt das Skript aus, das gerade l\u00e4uft; Zeile drei zeigt alle Umgebungsvariablen an und filtert sie dann nach denen, die &#8222;GIT&#8220; im Namen haben; Zeile vier gibt das aktuelle Arbeitsverzeichnis aus.<\/p>\n<p>Sobald du das Skript ausf\u00fchrst, siehst du eine Ausgabe, die den Umgebungsvariablen entspricht, die mit deinem Hook verbunden sind. So kannst du sicherstellen, dass deine eigenen Git-Hooks die Umgebungsvariablen so nutzen k\u00f6nnen, wie du es m\u00f6chtest.<\/p>\n<h2>Tipps und Tricks zum Verwalten und Teilen deiner Git Hooks<\/h2>\n<p>Die Verwaltung von Git Hooks in einem Team oder einer Organisation ist wichtig, um einheitliche Entwicklungspraktiken zu gew\u00e4hrleisten und deine <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-workflow\/\">Arbeitsabl\u00e4ufe<\/a> effizient zu automatisieren. Ein Beispiel daf\u00fcr ist die Zuweisung eines eigenen Hooks-Verzeichnisses. Hier gibt es zwei Ratschl\u00e4ge, die wir dir geben k\u00f6nnen:<\/p>\n<ul>\n<li>Lege ein zentrales Repository oder einen gemeinsamen Speicherort an, in dem du standardisierte Hooks speicherst. Du kannst diese Hooks in mehreren Projekten wiederverwenden und das Repository klonen oder verlinken, um einen globalen Zugriff zu erm\u00f6glichen.<\/li>\n<li>Organisiere deine Hooks in einer Registry oder Verzeichnisstruktur. So kann dein Team die Hooks, die es braucht, leicht finden und verwenden.<\/li>\n<\/ul>\n<p>Je wahrscheinlicher es ist, dass Hooks in mehreren Projekten eingesetzt werden, desto wichtiger ist die Dokumentation. Du solltest eine umfassende Dokumentation f\u00fchren, die den Zweck, die Verwendung und die Konfigurationsoptionen f\u00fcr jeden Hook im Repo beschreibt. Code-Reviews und Aktualisierungsstrategien f\u00fcr diese globalen Hooks sind ebenfalls wichtig.<\/p>\n<p>Wir empfehlen dir au\u00dferdem, benutzerdefinierte Hooks zusammen mit der Codebasis deines Projekts im Versionskontrollsystem (VCS) zu speichern. So wird sichergestellt, dass das gesamte Team Zugriff auf die gesamte Bibliothek der Hooks hat.<\/p>\n<h3>Server-seitige Git-Hooks verwenden<\/h3>\n<p>Serverseitige Hooks werden auf dem Server ausgef\u00fchrt, der das zentrale Git Repo hostet. So kannst du Richtlinien durchsetzen, Pr\u00fcfungen durchf\u00fchren oder Aktionen auf der Serverseite ausl\u00f6sen.<\/p>\n<p>Du hast zwei M\u00f6glichkeiten, deine serverseitigen Hooks zu speichern: innerhalb des VCS neben deinem Projekt oder in separaten Repositories.<\/p>\n<h4>Speicherung von serverseitigen Hooks in einem VCS<\/h4>\n<p>Es hat zwei Vorteile, wenn du dein VCS zum Speichern von <a href=\"https:\/\/kinsta.com\/de\/blog\/web-anwendungs-architektur\/\">serverseitigen<\/a> Hooks verwendest. Erstens kannst du sicherstellen, dass die Hooks die gleiche Versionierung und Wartung haben wie der Rest deiner Codebasis. Zweitens musst du nur ein Repository klonen, um sowohl auf den Projektcode als auch auf die Hooks zuzugreifen.<\/p>\n<p>Je nach Art der Hooks kann es jedoch zu Sicherheitsbedenken f\u00fchren, wenn die Hooks auf sensible Daten zugreifen, wenn sie im selben Repository gespeichert werden. Und wenn die Hooks komplex sind oder bestimmte Konfigurationen erfordern, kann dies die Komplexit\u00e4t deines Haupt-Repos erh\u00f6hen.<\/p>\n<h4>Server-seitige Hooks in separaten Repositories speichern<\/h4>\n<p>Wenn du serverseitige Hooks in separaten Repos aufbewahrst, kannst du sie unabh\u00e4ngig von deiner Codebasis aktualisieren und versionieren, was m\u00f6gliche Konflikte reduziert. Diese Modularit\u00e4t kann zu mehr Flexibilit\u00e4t f\u00fchren.<\/p>\n<p>Au\u00dferdem kannst du diese Hooks in Repositories mit eingeschr\u00e4nktem Zugriff speichern. So kannst du das Risiko der Offenlegung sensibler Daten verringern.<\/p>\n<p>Im Gegensatz dazu kann die Pflege <a href=\"https:\/\/kinsta.com\/de\/blog\/monorepo-vs-multi-repo\/\">mehrerer Repositories<\/a> zus\u00e4tzlichen Aufwand bedeuten. Wenn Hooks auf bestimmte Versionen deiner Hauptcodebasis angewiesen sind, kann es au\u00dferdem eine Herausforderung sein, \u00c4nderungen zwischen deinen Repos zu koordinieren.<\/p>\n<h3>Automatisierte Hooks-Installationen<\/h3>\n<p>Wenn du die Installation von Hooks in mehreren Repositories automatisierst, sparst du Zeit und sorgst f\u00fcr Konsistenz in deinem Entwicklungsworkflow. Mithilfe von Skripten und Vorlagen kannst du ganz einfach Hooks in verschiedenen Repositories einrichten, ohne manuell eingreifen zu m\u00fcssen.<\/p>\n<p>Der Prozess beginnt mit einem speziellen Repository, das deine globalen Hooks enth\u00e4lt. Du solltest diese standardisieren: Vermeide es zum Beispiel, Pfade oder Werte speziell f\u00fcr ein einzelnes Repository zu kodieren.<\/p>\n<p>Von hier aus kannst du beginnen, dein Installationsskript zu schreiben. Der folgende Pseudocode klont zum Beispiel das Template-Repository eines Hooks und <a href=\"https:\/\/kinsta.com\/blog\/managing-wordpress-development-with-symlinks\/\">kopiert (oder &#8222;symlink&#8220;)<\/a> die Hooks in das Verzeichnis <b>.git\/hooks<\/b> des jeweiligen Repositorys:<\/p>\n<pre><code class=\"language-bash\"># Example installation script\n# Usage: .\/install_hooks.sh \/path\/to\/repository\nTEMPLATE_REPO=\"https:\/\/github.com\/yourusername\/hooks-template.git\"\nREPO_PATH=\"$1\"\nREPO_NAME=$(basename \"$REPO_PATH\")\n\n# Clone the template repository\ngit clone --depth 1 \"$TEMPLATE_REPO\" \"$REPO_NAME-hooks\"\n\n# Copy or symlink hooks to the repository\ncp -r \"$REPO_NAME-hooks\/hooks\" \"$REPO_PATH\/.git\/\"\nrm -rf \"$REPO_NAME-hooks\"\necho \"Hooks installed in $REPO_NAME\u201d<\/code><\/pre>\n<p>Sobald du deine \u00c4nderungen gespeichert hast, kannst du das Installationsskript f\u00fcr jedes Repository ausf\u00fchren, in dem du die Hooks installieren m\u00f6chtest:<\/p>\n<pre><code class=\"language-bash\">.\/install_hooks.sh \/path\/to\/repository1\n.\/install_hooks.sh \/path\/to\/repository2\n# \u2026<\/code><\/pre>\n<p>Nimm \u00c4nderungen im Vorlagen-Repository vor, wenn du Hooks aktualisieren oder hinzuf\u00fcgen musst. Wenn du das n\u00e4chste Mal das Installationsskript in einem Repository ausf\u00fchrst, werden die aktualisierten Hooks installiert.<\/p>\n<h3>Git-Vorlagen<\/h3>\n<p>Mit Git-Vorlagen kannst du allgemeine Hooks und Konfigurationen f\u00fcr neue Repositories definieren. Sie bieten einen systematischen Ansatz, der dir dabei hilft, Einstellungen, Konfigurationen und andere Elemente zu automatisieren, wenn du neue Repositories erstellst oder klonst. Auf diese Weise kannst du sicherstellen, dass jedes Projektarchiv deinen typischen und bew\u00e4hrten Verfahren entspricht.<\/p>\n<p>Sobald du ein Vorlagenverzeichnis erstellt und deine Hook-Skripte hinzugef\u00fcgt hast, kannst du Git so konfigurieren, dass es das Verzeichnis als Vorlage f\u00fcr neue Repositories verwendet. Du kannst dies global oder lokal f\u00fcr jeden Benutzer einrichten.<\/p>\n<p>F\u00fcr globale Konfigurationen zeigst du auf dein Hooks-Vorlagenverzeichnis:<\/p>\n<pre><code class=\"language-bash\">git config --global init.templateDir \/path\/to\/hooks-template<\/code><\/pre>\n<p>F\u00fcr lokale Konfigurationen kannst du das genaue Repo angeben:<\/p>\n<pre><code class=\"language-bash\">git init --template=\/path\/to\/hooks-template<code><\/code><\/code><\/pre>\n<p>Wenn du mit <code>git init<\/code> ein neues Repository erstellst oder ein bestehendes Repository klonst, kopiert Git automatisch den Inhalt deines hooks-Vorlagenverzeichnisses in das <b>.git-Verzeichnis<\/b> des neuen Repos.<\/p>\n<p>Und schlie\u00dflich kannst du neben den allgemeinen Vorlagen-Hooks auch individuelle Hooks f\u00fcr bestimmte Anforderungen einrichten. Ein Skript k\u00f6nnte zum Beispiel nach einer repositoryspezifischen Hook-Konfigurationsdatei suchen und diese verwenden, wenn sie vorhanden ist.<\/p>\n<h2>Typische Praktiken, die dir helfen, sichere Git-Hooks zu pflegen<\/h2>\n<p>Die Verwendung von Git-Hooks kann f\u00fcr die Prozessautomatisierung und die Durchsetzung typischer Praktiken sehr hilfreich sein. Sie k\u00f6nnen aber auch Schwachstellen verursachen, wenn du deine Hooks nicht gut genug verwaltest.<\/p>\n<p>Hier ist eine kurze Liste von Praktiken, die du f\u00fcr deine eigenen Hooks anwenden kannst:<\/p>\n<ul>\n<li>Achte darauf, dass du die <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">Berechtigungen<\/a> f\u00fcr Hooks \u00fcberpr\u00fcfst und einschr\u00e4nkst, besonders wenn es sich um Beispiele von Drittanbietern handelt.<\/li>\n<li>\u00dcberpr\u00fcfe und bereinige immer deine Eingabeparameter, um <a href=\"https:\/\/kinsta.com\/de\/blog\/sql-injection\/\">Code-Injections<\/a> zu verhindern. Verwende sichere Praktiken, z. B. vermeide die direkte Verwendung von Benutzereingaben in deinen Skripten.<\/li>\n<li>Achte darauf, dass die Hooks keine vertraulichen Informationen enthalten. Hier sind Umgebungsvariablen oder ein sicherer Speicher von gro\u00dfem Nutzen.<\/li>\n<li>\u00dcberpr\u00fcfe und teste Hooks regelm\u00e4\u00dfig, um unbeabsichtigten Ressourcenverbrauch zu verhindern. Dies k\u00f6nnte sogar zu <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-ein-ddos-angriffe\/\">Distributed Denial of Service (DDoS)-Angriffen<\/a> f\u00fchren.<\/li>\n<\/ul>\n<p>Au\u00dferdem solltest du einen gr\u00fcndlichen und umfassenden Test- und \u00dcberpr\u00fcfungsprozess einf\u00fchren. So kannst du Schwachstellen und andere Fehler in Zukunft vermeiden.<\/p>\n<h3>Validierung<\/h3>\n<p>Wir sollten mehr \u00fcber die Implementierung einer angemessenen Validierung und <a href=\"https:\/\/kinsta.com\/de\/blog\/fehlern-in-javascript\/\">Fehlerbehandlung<\/a> f\u00fcr deine Hooks sprechen. Das ist wichtig, um Zuverl\u00e4ssigkeit, Stabilit\u00e4t und Sicherheit zu gew\u00e4hrleisten.<\/p>\n<p>Du musst zum Beispiel immer alle Eingaben oder Parameter validieren, die deine Hook-Skripte erhalten. Es gibt aber noch viel mehr, was du tun kannst, um eine gute Validierung sicherzustellen. Du kannst sicherstellen, dass sich das Repository in dem erwarteten Zustand befindet, damit der Hook erfolgreich ausgef\u00fchrt werden kann. \u00dcberpr\u00fcfe zum Beispiel bei einem Pre-Commit-Hook, ob du die notwendigen Dateien vor dem Commit bereitstellst.<\/p>\n<figure id=\"attachment_166983\" aria-describedby=\"caption-attachment-166983\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-166983 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/hook-exit-code.png\" alt=\"Ein Teil der iTerm Anwendung f\u00fcr macOS, der ein Beispiel f\u00fcr einen Git-Hook zeigt, der in einem NeoVim-Fenster ge\u00f6ffnet ist. Es gibt einen kleinen Codeabschnitt f\u00fcr einen Pre-Push-Hook, mit einem Exit 0 Code am Ende der Suite.\" width=\"1000\" height=\"487\"><figcaption id=\"caption-attachment-166983\" class=\"wp-caption-text\">Ein Ausschnitt aus einer Git-Hook-Datei mit dem Exit 0-Code als Endzeile<\/figcaption><\/figure>\n<p>Auch die Fehlerbehandlung ist wichtig. Exit-Codes sind in Hooks genauso wichtig wie in deiner Codebasis, ebenso wie Fehlerprotokolle und informative Fehlermeldungen. wie bei gr\u00f6\u00dferen Codebasen sollte auch hier ein &#8222;elegantes Versagen&#8220; dein Ziel sein.<\/p>\n<p>In der Praxis kann es nat\u00fcrlich sein, dass deine Hooks eine komplexere Validierungs- und Fehlerbehandlungslogik ben\u00f6tigen. Das bedeutet, dass regelm\u00e4\u00dfige Tests noch wichtiger sind als bisher.<\/p>\n<h3>Unbeabsichtigte zerst\u00f6rerische Handlungen<\/h3>\n<p>Unf\u00e4lle passieren. Deshalb ist es wichtig, dass du deine Git-Hooks so einrichtest, dass sie ungewollte zerst\u00f6rerische Aktionen verhindern, um Datenverluste oder Sch\u00e4den zu vermeiden. Hooks k\u00f6nnen im Wesentlichen als Sicherheitsnetze fungieren, indem sie den Benutzer auf potenziell sch\u00e4dliche Aktionen hinweisen.<\/p>\n<p>Pre-Receive- und Pre-Commit-Hooks eignen sich gut daf\u00fcr. Sehen wir uns kurz an, wie diese beiden Hooks helfen k\u00f6nnen:<\/p>\n<ul>\n<li><b>Pre-receive hooks helfen bei serverseitigen Pr\u00fcfungen.<\/b> Sie werden ausgel\u00f6st, bevor neue Zweige oder Tags vom Client akzeptiert werden. Dein Skript sollte eingehende Verweise untersuchen, auf Aktionen wie Force Pushes oder Zweigl\u00f6schungen pr\u00fcfen und den Nutzer zur Best\u00e4tigung auffordern. Du solltest auch die gepushten Referenzen analysieren, um festzustellen, ob sie Aktionen wie Force Pushing (<code>--force<\/code>) oder <a href=\"https:\/\/kinsta.com\/de\/blog\/git-delete-lokaler-zweig\/\">Branch Deletion<\/a> beinhalten.<\/li>\n<li><b>Pre-Commit-Hooks arbeiten auf der Client-Seite und werden ausgef\u00fchrt, bevor du einen Commit finalisierst.<\/b> Sie verhindern zwar nicht direkt zerst\u00f6rerische Aktionen auf dem Server, aber sie <i>k\u00f6nnen<\/i> helfen, lokale Fehler vor dem Push zu vermeiden. Dein Skript sollte die bereitgestellten \u00c4nderungen analysieren und nach Elementen wie <code>force push<\/code> in den Commit-Nachrichten suchen. Daraufhin wird eine Warn- oder Fehlermeldung f\u00fcr den Benutzer angezeigt.<\/li>\n<\/ul>\n<p>Unabh\u00e4ngig davon, welche Methoden du einsetzt, m\u00fcssen sie sicher, effizient und optimal f\u00fcr deine Bed\u00fcrfnisse sein. Dies erfordert eine gr\u00fcndliche \u00dcberpr\u00fcfung und Teststrategie.<\/p>\n<h3>\u00dcberpr\u00fcfen und Testen von Git-Hooks<\/h3>\n<p>Das \u00dcberpr\u00fcfen und Testen von Hooks ist unerl\u00e4sslich, um sicherzustellen, dass sie richtig funktionieren und mit deinem Entwicklungsablauf \u00fcbereinstimmen. Peer Reviews, eine klare Dokumentation, eine F\u00fclle von Kommentaren und vieles mehr k\u00f6nnen dazu beitragen, dass die Hooks produktionsreif sind.<\/p>\n<p>Beim Testen ist es wichtig, verschiedene Beispieldaten isoliert zu verwenden. Du kannst auch automatisierte Regressions- oder Integrationstests durchf\u00fchren.<\/p>\n<p>Schlie\u00dflich raten wir dir, die Hooks in verschiedenen Umgebungen zu testen (z. B. auf deinen <a href=\"https:\/\/kinsta.com\/de\/devkinsta\/\">Entwicklungs-<\/a>, <a href=\"https:\/\/kinsta.com\/de\/wordpress-hosting\/staging\/\">Staging-<\/a> und <a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/staging-umgebung\/#push-staging-to-live-1\">Produktionsservern<\/a>), um sicherzustellen, dass sie ein einheitliches Verhalten zeigen. Eine Echtzeit-Protokollierung hilft dir dabei, denn sie zeigt dir, was passiert, wenn die Daten von Server zu Server wandern.<\/p>\n<h2>Fehlersuche bei deinen Hooks<\/h2>\n<p>Wie bei jeder Codebasis kann es sein, dass du auch bei deinen Hooks eine Fehlersuche durchf\u00fchren musst &#8211; sogar \u00fcber mehrere Versuche hinweg. Unabh\u00e4ngig von der Art deines Git-Hooks wirst du feststellen, dass immer wieder dieselben Fehler auftauchen. Bei vielen dieser Fehler handelt es sich um einfache Probleme, die alle Arten von Projekten betreffen, z. B. Syntaxfehler, Probleme mit Berechtigungen, die Verwendung relativer oder fest kodierter Pfade und vieles mehr.<\/p>\n<p>Es ist aber auch eine gute Idee, nach fehlenden Abh\u00e4ngigkeiten zu suchen, denn einige Hooks sind auf externe Tools, Dateien oder Bibliotheken angewiesen. Daher musst du sie in der Umgebung, in der du den Hook ausf\u00fchrst, verf\u00fcgbar machen.<\/p>\n<p>Es gibt jedoch bestimmte Probleme, die bei Git-Hooks auftauchen k\u00f6nnen. Zum Beispiel sollten Hooks mit einem Statuscode ungleich Null beendet werden, um einen Fehler anzuzeigen. Au\u00dferdem sollten Hooks keine Endlosschleifen enthalten. Wenn du beides nicht beachtest, kannst du unerwartetes Verhalten verursachen und deinen Arbeitsablauf st\u00f6ren.<\/p>\n<p>Es kann auch vorkommen, dass Konflikte zwischen zwei Hooks zu unbeabsichtigten Wechselwirkungen und Konsequenzen f\u00fchren. Sogenannte <a href=\"https:\/\/www.techtarget.com\/searchstorage\/definition\/race-condition\" target=\"_blank\" rel=\"noopener noreferrer\">&#8222;Race Conditions&#8220;<\/a> k\u00f6nnen deine Erwartungen ebenfalls beeintr\u00e4chtigen. Das ist der Fall, wenn zwei oder mehr Hooks durch \u00e4hnliche Ereignisse ausgel\u00f6st werden, aber einer vor dem anderen abgeschlossen wird &#8211; das hat Auswirkungen auf das von dir erwartete Endergebnis.<\/p>\n<p>An dieser Stelle sind \u00dcberpr\u00fcfungen und Tests besonders wichtig. Auch die Dokumentation ist wichtig, um Probleme zu vermeiden und sicherzustellen, dass die Hooks so funktionieren, wie du es erwartest.<\/p>\n<p>Apropos Dokumentation: Das <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Customizing-Git-Git-Hooks\" target=\"_blank\" rel=\"noopener noreferrer\">Referenzmaterial von Git<\/a> ist eine wichtige Lekt\u00fcre. Zusammen mit diesem Artikel und vielleicht der unabh\u00e4ngigen <a href=\"https:\/\/githooks.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git Hooks-Anleitung<\/a> (\u00fcber <a href=\"https:\/\/kinsta.com\/de\/blog\/github-pages\/\">GitHub Pages<\/a>) solltest du nicht allzu viel Lesestoff ben\u00f6tigen.<\/p>\n<figure id=\"attachment_166984\" aria-describedby=\"caption-attachment-166984\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-166984 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/git-hooks-website.png\" alt=\"Die Git Hooks Website eines Drittanbieters mit einer Einf\u00fchrung in Hooks und einer Erkl\u00e4rung. Sie verwendet schwarzen Text auf wei\u00dfem Hintergrund. In der Ecke befindet sich das GitHub-Symbol, das darauf hinweist, dass die Seite auf GitHub Pages gehostet wird.\" width=\"1000\" height=\"571\"><figcaption id=\"caption-attachment-166984\" class=\"wp-caption-text\">Die GitHooks Guide Website<\/figcaption><\/figure>\n<p>Vielleicht m\u00f6chtest du dir aber auch Apps ansehen, die dir bei der Verwaltung von Git Hooks helfen. <a href=\"https:\/\/github.com\/evilmartians\/lefthook\" target=\"_blank\" rel=\"noopener noreferrer\">Lefthook<\/a> wird regelm\u00e4\u00dfig aktualisiert und bietet viel Unterst\u00fctzung auf GitHub, w\u00e4hrend <a href=\"https:\/\/typicode.github.io\/husky\/\" target=\"_blank\" rel=\"noopener noreferrer\">Husky<\/a> sich hervorragend f\u00fcr das Linting deiner Commit-Nachrichten eignet.<\/p>\n<h2>Die Vorteile der Integration von Hooks in Continuous Integration (CI\/CD) Pipelines<\/h2>\n<p>CI\/CD-Pipelines funktionieren gut mit Git-Hooks, da diese Skripte dir helfen k\u00f6nnen, Aufgaben zu automatisieren, eine gleichbleibende Qualit\u00e4t zu gew\u00e4hrleisten und Sicherheits\u00fcberpr\u00fcfungen durchzuf\u00fchren.<\/p>\n<p>Mit Pre-Commit-Hooks kannst du zum Beispiel Code-Qualit\u00e4tspr\u00fcfungen wie Linting, statische Analyse und Formatierung durchf\u00fchren. Wenn es um das Testen geht, kannst du in der Pre-Commit-Phase Unit-Tests, Testsuiten oder andere automatisierte Pr\u00fcfungen ausl\u00f6sen. Mit Pre-Push-Hooks hingegen kannst du Integrationstests, <a href=\"https:\/\/kinsta.com\/de\/blog\/website-sicherheits-check\/\">Sicherheitsscans<\/a> und vieles mehr durchf\u00fchren.<\/p>\n<p>Der Einsatz von Hooks in deinen CI\/CD-Pipelines bietet dir viele Vorteile:<\/p>\n<ul>\n<li><b>Konsistenz.<\/b> Mit Hooks kannst du konsistente Praktiken f\u00fcr alle Commits und Bereitstellungen durchsetzen, was die Fehlerquote in allen Bereichen reduziert.<\/li>\n<li><b>Automatisierte Pr\u00fcfungen.<\/b> Du kannst Codequalit\u00e4tspr\u00fcfungen, Tests, Sicherheits\u00fcberpr\u00fcfungen und andere wichtige Aufgaben automatisieren. Dadurch wird der manuelle Aufwand reduziert und du hast mehr Zeit f\u00fcr andere Aufgaben.<\/li>\n<li><b>Fr\u00fchzeitige Erkennung von Problemen.<\/b> Mit Hooks kannst du Probleme fr\u00fchzeitig im Entwicklungsprozess erkennen und so verhindern, dass sie sich in deiner Pipeline ausbreiten.<\/li>\n<li><b>Geringere Bereitstellungsrisiken.<\/b> Mit automatisierten Pr\u00fcfungen und Tests, die durch Hooks ausgel\u00f6st werden, kann das Risiko, fehlerhaften Code einzusetzen, erheblich reduziert werden.<\/li>\n<\/ul>\n<p>Da du <a href=\"https:\/\/kinsta.com\/de\/docs\/kinsta-api\/\">mit der API von Kinsta<\/a> <a href=\"https:\/\/kinsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\">CI\/CD-Pipelines einrichten kannst<\/a>, kannst du auch hier Git-Hooks integrieren. Mit Kinsta kannst du <a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/seiten-verwaltung\/git\/\">dein gesamtes Repo<\/a> von einem remoten Standort abrufen und Pushes mit einem Plugin eines Drittanbieters wie <a href=\"https:\/\/wppusher.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">WP Pusher<\/a> durchf\u00fchren.<\/p>\n<figure id=\"attachment_166985\" aria-describedby=\"caption-attachment-166985\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-166985 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/10\/wppusher-home-page.png\" alt=\"Die WP Pusher-Startseite hat einen blauen Hintergrund und zeigt eine Tagline und eine Beschreibung des Plugins sowie einen Screenshot des Einstellungsbildschirms im WordPress-Dashboard.\" width=\"1000\" height=\"525\"><figcaption id=\"caption-attachment-166985\" class=\"wp-caption-text\">Die WP Pusher-Startseite<\/figcaption><\/figure>\n<p>Das bedeutet nat\u00fcrlich auch, dass du die M\u00f6glichkeit hast, Git-Hooks zu verwenden. So kann deine Kinsta-Installation diese leistungsstarken Skripte in deinem Repo nutzen.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p><a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> ist ein unverzichtbares Werkzeug f\u00fcr jedes Entwicklungsprojekt, aber vor allem ein Aspekt kann deinen Arbeitsablauf bei der Programmierung und Bereitstellung von Inhalten enorm beschleunigen. Mit Git Hooks kannst du Skripte in einer Reihe von Sprachen erstellen, um verschiedene Aspekte deines Versionskontrollprozesses zu automatisieren. Es ist ein einfaches Konzept mit einem etwas komplexen Unterbau.<\/p>\n<p>Unser Beitrag zeigt dir, wie du Git Hooks mit fortgeschrittenen Techniken optimal nutzen kannst. Du kannst sie sowohl lokal als auch serverseitig verwenden, sie mit Parametern und Variablen dynamisch gestalten, mit mehreren Remote-Repos arbeiten und vieles mehr. Wir sind der Meinung, dass Git Hooks zu deiner Geheimwaffe werden k\u00f6nnten, um die Produktivit\u00e4t, die Codequalit\u00e4t und die Projektdurchlaufzeit zu steigern.<\/p>\n<p>Hast du Fragen zu Git Hooks und wie du sie einsetzen kannst? Lass es uns in den Kommentaren unten wissen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Git muss nicht komplex sein, aber es gibt bestimmte Aspekte, die kompliziert sind und ein tieferes Verst\u00e4ndnis erfordern &#8211; Git Hooks zum Beispiel. Das sind Skripte, &#8230;<\/p>\n","protected":false},"author":199,"featured_media":66692,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[943],"class_list":["post-66691","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices<\/title>\n<meta name=\"description\" content=\"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices\" \/>\n<meta property=\"og:description\" content=\"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-14T10:12:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-17T07:41:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"22\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices\",\"datePublished\":\"2023-11-14T10:12:31+00:00\",\"dateModified\":\"2023-11-17T07:41:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\"},\"wordCount\":4838,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\",\"name\":\"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"datePublished\":\"2023-11-14T10:12:31+00:00\",\"dateModified\":\"2023-11-17T07:41:29+00:00\",\"description\":\"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices","description":"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/","og_locale":"de_DE","og_type":"article","og_title":"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices","og_description":"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!","og_url":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-11-14T10:12:31+00:00","article_modified_time":"2023-11-17T07:41:29+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Jeremy Holcombe","Gesch\u00e4tzte Lesezeit":"22\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices","datePublished":"2023-11-14T10:12:31+00:00","dateModified":"2023-11-17T07:41:29+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/"},"wordCount":4838,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/git-hooks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/","url":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/","name":"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","datePublished":"2023-11-14T10:12:31+00:00","dateModified":"2023-11-17T07:41:29+00:00","description":"Git bietet eine M\u00f6glichkeit, eigene Skripte f\u00fcr bestimmte Repo-Ereignisse zu verwenden. Erfahre mehr \u00fcber Git Hooks und einige fortgeschrittene Techniken, um sie zu nutzen!","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/git-hooks\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/git-hooks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinsta.com\/de\/thema\/git\/"},{"@type":"ListItem","position":3,"name":"Git Hooks beherrschen: Fortgeschrittene Techniken und Best Practices"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/66691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=66691"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/66691\/revisions"}],"predecessor-version":[{"id":66988,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/66691\/revisions\/66988"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/translations\/es"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/66691\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/66692"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=66691"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=66691"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=66691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}