{"id":56420,"date":"2023-11-07T11:13:56","date_gmt":"2023-11-07T10:13:56","guid":{"rendered":"https:\/\/kinsta.com\/nl\/?p=56420&#038;preview=true&#038;preview_id=56420"},"modified":"2023-12-18T17:54:54","modified_gmt":"2023-12-18T16:54:54","slug":"git-hooks","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/","title":{"rendered":"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices"},"content":{"rendered":"<p>Git hoeft niet complex te zijn, maar er zijn bepaalde facetten die ingewikkeld zijn en waar je toch wat energie in moet steken om te begrijpen &#8211; Git hooks zijn daar een voorbeeld van. Dit zijn scripts die Git automatisch uitvoert op basis van bepaalde gebeurtenissen.<\/p>\n<p>Hoewel ze eenvoudig kunnen zijn, heb je veel meer mogelijkheden om ze op een effectieve manier te gebruiken. Maar om dit te doen, moet je alle radertjes begrijpen die het hele wiel vormen.<\/p>\n<p>In dit artikel zullen we kijken naar geavanceerde technieken voor Git hooks, waaronder een aantal basisprincipes, hoe je ze kunt maken en installeren, en meer.<\/p>\n<p>In dit artikel zullen we hookparameters en omgevingsvariabelen uitleggen, wat tips en trucs geven, methodes om problemen op te lossen doornemen, en nog veel meer.<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>De grondbeginselen van Git hooks: een inleiding<\/h2>\n<p>Een van de belangrijkste eigenschappen van <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> zijn de hooks: een krachtig mechanisme waarmee je taken kunt automatiseren, standaarden kunt afdwingen en consistente werkwijzen kunt garanderen gedurende de levenscyclus van een project.<\/p>\n<p>Git hooks zijn scripts die automatisch worden uitgevoerd op specifieke punten in de Git workflow. Je kunt ze gebruiken om het gedrag van Git aan te passen en uit te breiden om aan de behoeften van je project te voldoen. Hooks zorgen ervoor dat de kwaliteit van de code behouden blijft, tests worden uitgevoerd en implementaties soepel verlopen.<\/p>\n<p>Git biedt verschillende soorten hooks, en elke zal op verschillende momenten in de Git workflow geactiveerd worden:<\/p>\n<ul>\n<li><b>Pre-commit.<\/b> Deze hooks worden uitgevoerd voordat je een commit afrondt, waardoor je code stijlen kunt afdwingen, tests kunt uitvoeren of op syntax fouten kunt controleren.<\/li>\n<li><b>Post-commit.<\/b> Dit wordt uitgevoerd nadat je een commit hebt gemaakt. Het is handig voor notificaties of <a href=\"https:\/\/kinsta.com\/nl\/blog\/git-voor-gevorderden\/\">loggen<\/a>.<\/li>\n<li><b>Pre-push.<\/b> Deze hook wordt uitgevoerd voordat je <a href=\"https:\/\/kinsta.com\/nl\/blog\/zo-push-je-code-naar-github\/\">code pusht<\/a> en stelt je in staat om integratietests uit te voeren, te controleren op compatibiliteit of om de kwaliteit te waarborgen.<\/li>\n<li><b>Post-push.<\/b> De laatste hook wordt uitgevoerd nadat je een push hebt voltooid. Als zodanig is het waardevol voor het uitrollen van code naar productie of het bijwerken van documentatie.<\/li>\n<\/ul>\n<p>Je vindt hooks in de <code>.git\/hooks<\/code> map van je Git repository. Er zijn daar ook voorbeeldhooks &#8211; je kunt ze gebruiken als templates om je eigen custom scripts te maken. De hooks hebben betrekking op een reeks acties en gebruiken een <b>sample- <\/b>achtervoegsel als referentie:<\/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=\"Een macOS Finder-scherm met een lokale map met 13 witte voorbeeld hooks-bestanden op een grijze achtergrond.\" width=\"1000\" height=\"644\"><figcaption id=\"caption-attachment-166981\" class=\"wp-caption-text\">Een lokale Git map met voorbeeld hooks bestanden.<\/figcaption><\/figure>\n<p>Hooks worden geactiveerd tijdens verschillende Git acties. Bijvoorbeeld, een pre-commit hook start als je wijzigingen commit, en een pre-push hook start voordat je <a href=\"https:\/\/kinsta.com\/nl\/blog\/git-vs-github\/\">naar remote pusht<\/a>. Als je meer begrijpt over deze triggers, kun je hooks strategischer inzetten om kwaliteitscontrole te verbeteren en je workflow te stroomlijnen.<\/p>\n<h2>Zo maak en installeer je custom Git hooks<\/h2>\n<p>Het maken en installeren van basis aangepaste Git hooks kan een complex proces zijn. Maar de basis die je hier zult leren, zal je later voorbereiden op het ontwikkelen van geavanceerde hooks. Laten we een paar concepten doornemen die van toepassing zijn op elke hook die je maakt en installeert.<\/p>\n<h3>Een geschikt type hook kiezen<\/h3>\n<p>Het gebruik van het juiste hook type voor jouw specifieke use case is een belangrijke eerste stap. Het begint met het begrijpen van je eigen ontwikkelworkflow en behoeften. Hier is een snelle checklist met overwegingen die je mee kan nemen:<\/p>\n<ul>\n<li>Overweeg eerst de verschillende fasen van je proces, zoals <a href=\"https:\/\/kinsta.com\/nl\/blog\/git-voor-webdevelopment\/\">coderen, testen en deployen<\/a>. Ga ook na waar dat proces baat zou kunnen hebben bij <a href=\"https:\/\/kinsta.com\/nl\/changelog\/kinsta-api\/\">automatisering<\/a> en controles.<\/li>\n<li>Zoek van daaruit naar plekken in je workflow waar vaak fouten of inconsistenties voorkomen. Custom Git hooks kunnen hierbij helpen. Bijvoorbeeld, als je vergeet om tests uit te voeren voor een commit, kan een pre-commit hook het probleem aanpakken.<\/li>\n<li>Vervolgens moet je bedenken wanneer je de hook wilt uitvoeren binnen je werkstroom. Bijvoorbeeld, als je er zeker van wilt zijn dat alle commits voldoen aan <a href=\"https:\/\/kinsta.com\/nl\/blog\/html-best-practices\/\">de coderingsstandaarden<\/a>, dan is een pre-commit hook geschikt. Als je <a href=\"https:\/\/kinsta.com\/nl\/blog\/code-review-tools\/\">code wilt valideren<\/a> voordat je naar remote pusht, dan is een pre-push hook meer geschikt.<\/li>\n<li>Zorg er tenslotte voor dat het gekozen hook type compatibel is met je ontwikkelomgeving en de tools die je gebruikt. Denk na over de <a href=\"https:\/\/kinsta.com\/nl\/blog\/scripttalen\/\">scripttaal<\/a> die je gaat gebruiken voor de hook en zijn uitvoeringsomgeving.<\/li>\n<\/ul>\n<p>Op dit punt zou je in staat moeten zijn om duidelijke doelen voor je hook te defini\u00ebren. Het kan zelfs zijn dat elke doelstelling een ander type hook vereist. Hoewel het verleidelijk is om scripts te maken voor elk mogelijk scenario, is het een goed idee om je eerst te richten op het aanpakken van kritieke pijnpunten.<\/p>\n<h3>Custom Git hooks benoemen en plaatsen<\/h3>\n<p>Het correct benoemen en plaatsen van aangepaste Git hooks is cruciaal om hun functionaliteit en onderhoudbaarheid te garanderen. Net als met bijvoorbeeld de functies, bestanden, klassenamen\u00a0 van je code, zouden je Git hooks ook consistente en beschrijvende namen moeten hebben.<\/p>\n<p>Als hooks in de loop van de tijd meerdere projecten zullen ondersteunen, als een template, dan wil je misschien voorvoegsels gebruiken &#8211; misschien met initialen van developers, een afdeling of een bedrijfsnaam. Over het algemeen gebruiken Git hooks kleine letters en koppeltekens voor de leesbaarheid &#8211; bijvoorbeeld, <b>mijn-project-pre-commit<\/b>.<\/p>\n<p>Bovendien, hoewel je Git hooks in de <b>.git\/hooks<\/b> map van je repo kunt opslaan, zouden <i>custom <\/i>hooks in een aparte map in de hoofdmap van het project moeten gaan. Dit voorkomt per ongeluk overschrijven tijdens een Git update. Je wil echter <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-versiebeheer\/\">versiebeheer<\/a> voor die hooks willen gebruiken, samen met de rest van de code van je project.<\/p>\n<h3>Een basic custom Git hook maken<\/h3>\n<p>De typische manier om een basic Git hook te schrijven is om een nieuw bestand te maken met de naam van je gekozen hook (zoals <b>pre-commit<\/b>) in je hooks map. We zullen de hook namen later noemen als we het over parameters hebben.<\/p>\n<p>Voordat je een bestand opent om ermee te werken, moet je er zeker van zijn dat het uitvoerbaar is met het volgende commandline fragment:<\/p>\n<pre><code class=\"language-bash\">chmod +x path\/to\/file\/hook-name<\/code><\/pre>\n<p>Vergeet niet om onze placeholders te vervangen door de juiste informatie. We zullen dit fragment door het hele artikel heen gebruiken, omdat het een typische actie zou moeten zijn als je een nieuwe Git hook aanmaakt.<\/p>\n<p>Zodra het bestand uitvoerbaar en open is, kun je je eigen logica toevoegen met de scripttaal van je voorkeur. Dit kan Bash, <a href=\"https:\/\/kinsta.com\/nl\/blog\/python-tutorials\/\">Python<\/a>, <a href=\"https:\/\/kinsta.com\/nl\/blog\/ruby-on-rails-vs-node-js\/\">Ruby<\/a> of een andere zijn. Het maken hiervan valt natuurlijk buiten het bereik van wat we hier zullen behandelen. Er zijn later echter enkele pseudocode voorbeelden om specifieke gebruikssituaties en scenario&#8217;s te laten zien.<\/p>\n<p>Tot slot, voordat je wijzigingen commit, test je je hook door te proberen de gerelateerde actie uit te voeren (zoals een commit). Dit is de basisaanpak voor het maken van Git hooks, maar er zijn genoeg geavanceerde gebruikssituaties. Daar zullen we het volgende over hebben.<\/p>\n<h2>Geavanceerde custom hooks maken en installeren<\/h2>\n<p>Het maken van basis Git hooks zal iets zijn dat je veel doet gedurende je carri\u00e8re als developer. Er zijn echter genoeg situaties die vragen om meer geavanceerde en complexe hooks. Hierna zullen we kijken naar een aantal use cases en voorbeeld hooks voor een aantal veel voorkomende scenario&#8217;s.<\/p>\n<h3>Een hook maken die code styling afdwingt met linters<\/h3>\n<p>Het gebruik van een linter om code styling af te dwingen is een fantastische toepassing voor Git hooks. Het kan helpen om consistente codekwaliteit in je repository te behouden en het zou iets moeten zijn waar je veel waarde uit kunt halen.<\/p>\n<p>Natuurlijk moet je een linter kiezen die past bij de programmeertaal van je project. <a href=\"https:\/\/pypi.org\/project\/black\/\" target=\"_blank\" rel=\"noopener noreferrer\">Black<\/a> is bijvoorbeeld fantastisch voor Python. Wij gaan hier <a href=\"https:\/\/eslint.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ESLint<\/a> voor JavaScript gebruiken om een pre-commit hook te maken.<\/p>\n<p>Installeer eerst de linter als globaal of lokaal pakket binnen je project. Hiervoor heb je <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a> en <a href=\"https:\/\/www.npmjs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">npm<\/a> nodig:<\/p>\n<pre><code class=\"language-bash\">npm install eslint --save-dev<\/code><\/pre>\n<p>Navigeer vervolgens naar je hooks directory binnen je repo. Maak je pre-commit bestand aan en schrijf dan een script dat de linter uitvoert op je opgevoerde bestanden. De hook zou de commit moeten voorkomen als de linter problemen vindt. Hier is een simpel voorbeeld:<\/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>Zodra je er zeker van bent dat de hook uitvoerbaar is, test hem dan uit door middel van een commit. De pre-commit hook zou de linter moeten uitvoeren. Als er code stijl schendingen zijn, dan zul je de commit niet kunnen voltooien totdat je de problemen opgelost hebt.<\/p>\n<p>Natuurlijk moet je een hook schrijven die werkt met je eigen <a href=\"https:\/\/kinsta.com\/nl\/blog\/beste-programmeertaal-om-te-leren\/\">programmeertaal<\/a> en linter, in overeenstemming met je project. Je zou dit voorbeeld bijvoorbeeld kunnen uitbreiden met linter configuratie-instellingen, integratie met je bouwproces en meer.<\/p>\n<h3>Een hook gebruiken voor het uitvoeren van testen voor een commit<\/h3>\n<p>Het implementeren van een pre-commit hook om tests uit te voeren voor een commit is een uitstekende manier om potenti\u00eble problemen in een vroeg stadium op te vangen. Op deze manier kun je ervoor zorgen dat je alleen betrouwbare code commit.<\/p>\n<p>Voor dit voorbeeld gebruiken we het <a href=\"https:\/\/jestjs.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jest test framework<\/a> voor JavaScript. Je zult iets willen installeren dat geschikt is voor jouw project (zoals altijd):<\/p>\n<pre><code class=\"language-bash\">npm install jest --save-dev<\/code><\/pre>\n<p>Zoals met elke hook, navigeer je naar je hooks directory, maak je een nieuw bestand aan, geef je het een naam en maak je het uitvoerbaar. Schrijf vanaf hier een script dat tests uitvoert op alle opgevoerde bestanden voor de commit. Hier is een ruwe template:<\/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>Wanneer je wijzigingen probeert te committen, zal de hook je tests uitvoeren op de opgevoerde bestanden. De commit zal stoppen voor alle mislukte tests, en je moet de problemen aanpakken voordat je opnieuw commit.<\/p>\n<h3>Een hook ontwikkelen voor het automatiseren van versiebeheer en labelen<\/h3>\n<p>Een uitstekende manier om het releaseproces te stroomlijnen is het automatiseren van versiebeheer en taggen binnen Git. Dit zorgt voor consistente versiebeheer in je codebase.<\/p>\n<p>Om te beginnen moet je een versiebeheerschema kiezen dat geschikt is voor je project. Dit valt buiten het bereik van dit artikel, maar veel voorkomende schema&#8217;s zijn Semantic Versioning (SemVer) of een custom versiebeheerpatroon.<\/p>\n<p>Bepaal vervolgens wat je hook precies gaat doen. Het zou bijvoorbeeld de huidige versie kunnen lezen, deze verhogen volgens een gekozen schema en de benodigde bestanden bijwerken met de nieuwe versie. Je zult ook een script willen schrijven voor het maken van tags gebaseerd op de versie, dat Git commando&#8217;s gebruikt om lichtgewicht of geannoteerde tags te maken.<\/p>\n<p>Als je eenmaal je bestand hebt gemaakt en de rechten hebt ingesteld, kun je beginnen met het schrijven van je hook. Dit kan een complexe en zeer specifieke hook zijn, die zelfs van project tot project kan veranderen. De meeste hooks van dit type zullen echter het volgende bevatten:<\/p>\n<ul>\n<li>Een functie die een gespecificeerd deel van een versie string (bijvoorbeeld <code>1.2.3<\/code>) verhoogt en de nieuwe versie teruggeeft.<\/li>\n<li>De mogelijkheid om de huidige versie uit een specifiek versiebestand te lezen.<\/li>\n<li>Een functie om het nieuwe versienummer te berekenen, inclusief welk specifiek deel te verhogen. Bijvoorbeeld <code>0<\/code> voor major, <code>1<\/code> voor minor, <code>2<\/code> voor patch.<\/li>\n<\/ul>\n<p>Vanaf hier moet het script het versiebestand bijwerken met het nieuwe nummer, een lichtgewicht tag aanmaken met de nieuwe versie en optioneel de nieuwe tag naar een remote repository pushen. Zodra je wijzigingen vastlegt, zal de hook ervoor zorgen dat iedere vastlegging wordt geassocieerd met een juiste versie en tag.<\/p>\n<p>Je zult deze hook waarschijnlijk nog verder willen aanpassen aan de eisen van je project. Je zou bijvoorbeeld zaken als het aanmaken van initi\u00eble tags, het omgaan met versieconflicten en het updaten van versieverwijzingen in bestanden kunnen afhandelen.<\/p>\n<h2>Hook parameters en omgevingsvariabelen begrijpen<\/h2>\n<p>Een van de redenen dat Git hooks zo krachtig zijn, is de manier waarop ze omgaan met dynamische variabelen. Het kan echter een complex concept zijn om te begrijpen. Hierna zullen we zowel omgevingsvariabelen als hookparameters bekijken &#8211; te beginnen met de laatste.<\/p>\n<h3>Hoe parameters aan hooks worden doorgegeven<\/h3>\n<p>Hooks kunnen specifieke parameters van Git ontvangen om toegang te krijgen tot contextuele informatie van je hoofdcodebase. Git stelt automatisch parameters in tijdens run-time, en hoewel je ze meestal niet specifiek hoeft te defini\u00ebren, moet je ze misschien wel declaren. Het is essentieel om deze te begrijpen om effectieve hooks te ontwikkelen.<\/p>\n<p>Hier is een overzicht van de belangrijkste punten over hookparameters:<\/p>\n<ul>\n<li>Git hooks gebruiken positionele variabelen, waarbij <code>$1<\/code> verwijst naar de eerste parameter, <code>$2<\/code> naar de tweede parameter, enzovoort. Deze parameters zijn niet willekeurig; ze hebben specifieke betekenissen en doelen. Als zodanig, hoewel ze niet &#8216;officieel&#8217; zijn, vertegenwoordigen ze geaccepteerde conventies bij het benaderen van de waarden van parameters.<\/li>\n<li>De volgorde van de parameters volgt een specifiek patroon. Git geeft deze parameters door aan je hookscript in een vooraf bepaalde volgorde, gebaseerd op de context van het hook-event.<\/li>\n<li>De namen van de variabelen geven het algemene doel van de parameters weer. Bijvoorbeeld, <code>$1<\/code> bevat vaak het pad naar een bestand, terwijl <code>$2<\/code> de bron van een actie kan zijn.<\/li>\n<\/ul>\n<p>Als je een parameter zou toevoegen die de hook niet kan aanroepen, zou het script deze over het algemeen niet kunnen gebruiken. Parameters zijn specifiek voor een bepaalde hook en uitvoeringscontext. Om problemen te voorkomen, moet je alleen gedocumenteerde parameters gebruiken. Je <i>kunt<\/i> echter de waarde van een positionele parameter toewijzen aan een andere variabele en deze vervolgens gebruiken in je script:<\/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 dit geval zal de variabele <code>EXAMPLE<\/code> dezelfde waarde hebben als <code>$1<\/code>, wat het pad is naar het bestand van het commit-bericht. Het gebruik van de gedocumenteerde variabelenamen maakt je code echter begrijpelijker.<\/p>\n<p>Merk op dat je in sommige gevallen <a href=\"https:\/\/www.computerhope.com\/jargon\/s\/stdin.htm\" target=\"_blank\" rel=\"noopener noreferrer\">standard input (<code>stdin<\/code><\/a> ) zult gebruiken om parameters te defini\u00ebren, in welk geval je die elementen in je hooks moet verwerken.<\/p>\n<h4>Git hook parameter waarden en definities vinden<\/h4>\n<p>Omdat elke Git hook zijn eigen parameters heeft, zul je waarschijnlijk een referentie nodig hebben om te achterhalen wat ze zijn voor jouw specifieke applicatie. Het goede nieuws is dat er een paar manieren zijn om dit te doen.<\/p>\n<p>Bijvoorbeeld, de offici\u00eble <a href=\"https:\/\/git-scm.com\/docs\/githooks\" target=\"_blank\" rel=\"noopener noreferrer\">Git hooks documentatie<\/a> bevat een aantal van de meest voorkomende parameters. Maar de beste aanpak is om een van de voorbeeld Git hooks te openen. Deze bestaan uit een mini-gids over hoe de hook te scripten en zullen parameter definities voor je bevatten:<\/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=\"Een voorbeeld van een Git hook-bestand in NeoVim op macOS. Het toont een gedeelte met commentaar waarin wordt uitgelegd hoe de hook moet worden gecodeerd, samen met speciale parameters die daarin kunnen worden gebruikt. Er is ook een gedeeltelijke voorbeeld-bash-code voor de hook.\" width=\"1000\" height=\"785\"><figcaption id=\"caption-attachment-166982\" class=\"wp-caption-text\">Een voorbeeld Git hook bestand in NeoVim.<\/figcaption><\/figure>\n<p>Deze zijn een uitstekende manier om Git hooks onder de knie te krijgen en kunnen je zelfs een eind op weg helpen bij het coderen ervan.<\/p>\n<h3>Omgevingsvariabelen<\/h3>\n<p>Git hooks kunnen argumenten ophalen van commandoregel argumenten, en <code>stdin,<\/code> zoals we hebben besproken. Ze kunnen echter ook argumenten ophalen uit de omgeving zelf zoals die draait binnen een <code>bash<\/code> shell.<\/p>\n<p>Deze <a href=\"https:\/\/kinsta.com\/blog\/what-is-an-environment-variable\/\">omgevingsvariabelen<\/a> laten je het gedrag van je Git hooks aanpassen en beslissingen nemen gebaseerd op verschillende aspecten van de Git workflow. Op deze manier kun je dynamische en context-bewuste Git hooks maken. Je kunt ze bijvoorbeeld gebruiken om commitberichten te valideren, toegang tot specifieke branches te regelen of aangepaste acties te starten op basis van de identiteit van de auteur.<\/p>\n<p>Het opsommen van alle omgevingsvariabelen valt ook buiten het bereik van dit artikel. We raden je aan om de <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Git-Internals-Environment-Variables\" target=\"_blank\" rel=\"noopener noreferrer\">Git documentatie<\/a> en voorbeeldhooks te bekijken voor hints over welke variabelen het zal gebruiken.<\/p>\n<h3>De waarden van omgevingsvariabelen testen<\/h3>\n<p>Git stelt meestal automatisch verschillende omgevingsvariabelen in, afhankelijk van de hook die het callt. Als zodanig kan dit problemen voor je veroorzaken als je je niet bewust bent van wat er ingesteld wordt. Neem bijvoorbeeld het volgende resultaat voor de <code>GIT_REFLOG_ACTION<\/code> variabele voor de pre-rebase en post-merge hooks:<\/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>Gelukkig is er een manier om <a href=\"https:\/\/longair.net\/blog\/2011\/04\/09\/missing-git-hooks-documentation\/\" target=\"_blank\" rel=\"noopener noreferrer\">te testen wat Git zal doen<\/a> met omgevingsvariabelen door een klein fragment binnen je hook te gebruiken:<\/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>Om de code samen te vatten: regel 2 print het script dat op dat moment draait; regel 3 stelt alle omgevingsvariabelen in om weer te geven, filtert ze dan op die met &#8220;GIT&#8221; in de naam; regel 4 print de huidige werkmap.<\/p>\n<p>Als je dit uitvoert, zie je uitvoer die overeenkomt met de omgevingsvariabelen die bij je hook horen. Vanaf hier heb je de kennis om ervoor te zorgen dat je eigen Git hooks omgevingsvariabelen kunnen gebruiken op de manier die jij wilt.<\/p>\n<h2>Tips en trucs om je Git Hooks te beheren en te delen<\/h2>\n<p>Het optimaal beheren van Git hooks binnen een team of organisatie is cruciaal om consistente development te garanderen en je <a href=\"https:\/\/kinsta.com\/nl\/blog\/wordpress-workflow\/\">workflows<\/a> op een effici\u00ebnte manier te automatiseren. Neem bijvoorbeeld het toewijzen van een speciale hooks directory. Er zijn twee adviezen die we je hier kunnen geven:<\/p>\n<ul>\n<li>Maak een centrale repository of gedeelde locatie waar je gestandaardiseerde hooks opslaat. Je kunt die hooks hergebruiken in meerdere projecten en klonen of linken naar de repository voor globale toegang.<\/li>\n<li>Organiseer je hooks in een register of mappenstructuur. Dit maakt het gemakkelijk voor je team om de hooks die ze nodig hebben te vinden en te gebruiken.<\/li>\n<\/ul>\n<p>Hoe waarschijnlijker het is dat hooks in meerdere projecten voorkomen, hoe groter het belang van documentatie. Je moet uitgebreide documentatie bijhouden die het doel, het gebruik en de configuratieopties voor elke hook in de repo beschrijft. Codebeoordelingen en updatestrategie\u00ebn voor deze globale hooks zijn ook essentieel.<\/p>\n<p>We raden je ook aan om aangepaste hooks op te slaan in het versiebeheersysteem (VCS), samen met de codebase van je project. Dit zorgt ervoor dat het hele team toegang heeft tot de hele bibliotheek van hooks.<\/p>\n<h3>Server-side Git hooks gebruiken<\/h3>\n<p>Server-side hooks worden uitgevoerd op de server die de centrale Git repo host. Als zodanig kun je beleidsregels afdwingen, controles uitvoeren of acties starten aan de server kant.<\/p>\n<p>Je hebt twee opslagmogelijkheden voor je server-side hooks: binnen het VCS naast je project of in aparte repositories.<\/p>\n<h4>Server-side hooks opslaan met behulp van een VCS<\/h4>\n<p>Er zijn twee voordelen aan het gebruik van je VCS om hooks <a href=\"https:\/\/kinsta.com\/nl\/blog\/webapplicatie-architectuur\/\">voor de server op<\/a> te slaan. Ten eerste kun je ervoor zorgen dat de hooks dezelfde versiebeheer en onderhoud hebben als de rest van je codebase. Ten tweede hoef je maar \u00e9\u00e9n repository te clonen om toegang te krijgen tot zowel de projectcode als de hooks.<\/p>\n<p>Echter, afhankelijk van de aard van de specifieke hooks, kan het opslaan ervan in dezelfde repo beveiligingsproblemen opleveren als die hooks toegang hebben tot gevoelige informatie. Bovendien, als de hooks complex zijn of specifieke configuraties vereisen, kan het de complexiteit van je hoofdrepository vergroten.<\/p>\n<h4>Server-side hooks opslaan in aparte repo&#8217;s<\/h4>\n<p>Door server-side hooks in aparte repo&#8217;s te bewaren, kun je ze onafhankelijk van je codebase updaten en versiebeheer uitvoeren, wat potenti\u00eble conflicten kan verminderen. Deze modulariteit kan meer flexibiliteit bieden.<\/p>\n<p>Bovendien kun je die hooks opslaan in repositories met beperkte toegang. Dit helpt je het risico op blootstelling van gevoelige gegevens te verminderen.<\/p>\n<p>Het onderhouden van <a href=\"https:\/\/kinsta.com\/nl\/blog\/monorepo-vs-multi-repo\/\">meerdere repositories<\/a> kan daarentegen extra inspanning kosten. Als hooks afhankelijk zijn van specifieke versies van je hoofdcode, kan het een uitdaging zijn om wijzigingen tussen je repositories te co\u00f6rdineren.<\/p>\n<h3>Hookinstallaties automatiseren<\/h3>\n<p>Het automatiseren van hookinstallaties in meerdere repositories kan tijd besparen en zorgen voor consistentie in je ontwikkelworkflow. Door scripts en templates te gebruiken, kun je eenvoudig hooks installeren in verschillende repositories zonder handmatige tussenkomst.<\/p>\n<p>Het proces begint met een speciale repository die je algemene hooks bevat. Je wilt deze standaardiseren: vermijd bijvoorbeeld het hardcoden van paden of waarden die specifiek zijn voor een enkele repo.<\/p>\n<p>Vanaf hier kun je beginnen met het schrijven van je installatiescript. De volgende pseudocode zal bijvoorbeeld de templaterepo van een hook klonen en de hooks <a href=\"https:\/\/kinsta.com\/blog\/managing-wordpress-development-with-symlinks\/\">kopi\u00ebren (of &#8216;symlinken&#8217;)<\/a> naar de <b>.git\/hooks<\/b> map van elke repository:<\/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>Zodra je je wijzigingen hebt opgeslagen, kun je het installatiescript uitvoeren voor elke repo waar je de hooks wilt installeren:<\/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>Breng wijzigingen aan in de templaterepository wanneer je hooks wilt bijwerken of toevoegen. De volgende keer dat je het installatiescript in een repository uitvoert, worden de bijgewerkte hooks ge\u00efnstalleerd.<\/p>\n<h3>Git templates<\/h3>\n<p>Met Git templates kun je algemene hooks en configuraties defini\u00ebren voor nieuwe repositories. Ze bieden een systematische aanpak om je te helpen setups, configuraties en andere elementen te automatiseren als je nieuwe repositories maakt of kloont. Zo kun je ervoor zorgen dat elke repo voldoet aan de door jou gevolgde practices.<\/p>\n<p>Als je eenmaal een templatemap hebt gemaakt en je hookscripts hebt toegevoegd, kun je Git configureren om de map te gebruiken als template voor nieuwe repositories. Je kunt dit globaal of lokaal per gebruiker instellen.<\/p>\n<p>Voor globale configuraties wijs je naar je hooks-template map:<\/p>\n<pre><code class=\"language-bash\">git config --global init.templateDir \/path\/to\/hooks-template<\/code><\/pre>\n<p>Voor lokale configuraties kun je de exacte repo opgeven:<\/p>\n<pre><code class=\"language-bash\">git init --template=\/path\/to\/hooks-template<code><\/code><\/code><\/pre>\n<p>Als je een nieuw repository aanmaakt met <code>git init<\/code> of een bestaand repository clonet, dan zal Git automatisch de inhoud van je hooks-template map naar de <b>.git<\/b> map in de nieuwe repo kopi\u00ebren.<\/p>\n<p>Tenslotte, waar templatehooks generiek kunnen zijn, kun je ook custom hooks toestaan gebaseerd op specifieke behoeften. Een script zou bijvoorbeeld kunnen controleren op een repository-specifiek hook configuratiebestand en het gebruiken als het aanwezig is.<\/p>\n<h2>Best practices om je te helpen om veilig Git hooks te onderhouden<\/h2>\n<p>Het gebruik van Git hooks kan waardevol zijn voor procesautomatisering en het afdwingen van best practices. Maar dit kan ook kwetsbaarheden met zich meebrengen als je je hooks niet goed genoeg beheert.<\/p>\n<p>Hier is een korte lijst van werkwijzen die je zou kunnen implementeren voor je eigen hooks:<\/p>\n<ul>\n<li>Zorg ervoor dat je <a href=\"https:\/\/docs.sevalla.com\/applications\/git\/github#authenticate-and-authorize\">permissies<\/a> voor hooks controleert en beperkt, vooral als het externe samples zijn.<\/li>\n<li>Valideer en sanitize altijd je invoerparameters om <a href=\"https:\/\/kinsta.com\/nl\/blog\/sql-injecties\/\">code-injecties<\/a> te beperken. Gebruik best practices rond beveiliging, zoals het vermijden van direct gebruik van user input in je scripts.<\/li>\n<li>Zorg ervoor dat hooks geen vertrouwelijke informatie bevatten. Dit is waar omgevingsvariabelen of veilige opslag enorme waarde bieden.<\/li>\n<li>Controleer en test hooks regelmatig om onbedoeld gebruik van resources te voorkomen. Dit kan zelfs leiden tot <a href=\"https:\/\/kinsta.com\/nl\/blog\/ddos-aanvallen-uitgelegd\/\">DDoS aanvallen (Distributed Denial of Service)<\/a>.<\/li>\n<\/ul>\n<p>Je wilt ook een grondig en uitgebreid test- en controleproces implementeren. Dit zal kwetsbaarheden en andere fouten in de toekomst helpen voorkomen.<\/p>\n<h3>Validatie<\/h3>\n<p>We gaan het nu hebben over het implementeren van goede validatie en <a href=\"https:\/\/kinsta.com\/nl\/blog\/fouten-in-javascript\/\">foutafhandeling<\/a> voor je hooks. Dit is cruciaal om betrouwbaarheid, stabiliteit en veiligheid te garanderen.<\/p>\n<p>Je wil bijvoorbeeld altijd alle invoer of parameters valideren die je hookscripts ontvangen. Er is echter nog veel meer dat je kunt doen om een goede validatie te garanderen. Je kunt ervoor zorgen dat de repository in de verwachte state is om de hook succesvol te laten draaien. Bijvoorbeeld, in een pre-commit hook, controleer of je de benodigde bestanden test voor de commit.<\/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=\"Een deel van de iTerm-app voor macOS, met een voorbeeld van een Git-hook geopend in een NeoVim-venster. Er is een klein stukje code voor een pre-push hook, met een exit 0-code aan het einde van de suite.\" width=\"1000\" height=\"487\"><figcaption id=\"caption-attachment-166983\" class=\"wp-caption-text\">Een deel van een Git hook bestand met de exit 0 code als eindregel.<\/figcaption><\/figure>\n<p>Foutafhandeling zal ook waardevol zijn. Exit codes zijn net zo cruciaal in hooks als in je codebase, net als foutlogs en informatieve foutmeldingen. Graceful failure zou hier je doel moeten zijn, net als bij grotere codebases.<\/p>\n<p>Natuurlijk kunnen je hooks in een echt scenario complexere validatie en foutafhandeling nodig hebben. Dit betekent dat regelmatig testen nog belangrijker is dan voorheen.<\/p>\n<h3>Onopzettelijke destructieve acties<\/h3>\n<p>Ongelukjes gebeuren, dus het instellen van je Git hooks om deze ongewenste destructieve acties te voorkomen is cruciaal om dataverlies of schade te voorkomen. Hooks kunnen in wezen fungeren als vangnetten door de gebruiker te vragen om mogelijk schadelijke acties.<\/p>\n<p>Pre-ontvangst en pre-commit hooks werken hier goed. Laten we snel bekijken hoe beide kunnen helpen:<\/p>\n<ul>\n<li><b>Pre-receive hooks helpen voor server-side controles.<\/b> Deze worden geactiveerd voordat nieuwe branches of tags van de client worden geaccepteerd. Je script moet binnenkomende verwijzingen onderzoeken, controleren op acties zoals geforceerde pushes of branchverwijderingen en de gebruiker om bevestiging vragen. Je zult ook de gepushte referenties willen analyseren om te bepalen of er acties zoals geforceerd pushen (<code>--force<\/code>) of <a href=\"https:\/\/kinsta.com\/nl\/blog\/git-delete-lokale-branch\/\">verwijderen van branches<\/a> bij betrokken zijn.<\/li>\n<li><b>Pre-commit hooks werken aan de client-side en draaien voordat je een commit afrondt.<\/b> Hoewel het niet direct destructieve acties op de server zal voorkomen, <i>kan<\/i> het helpen om lokale fouten te voorkomen voordat je gaat pushen. Je script zou de opgevoerde wijzigingen moeten analyseren en moeten zoeken naar elementen zoals <code>force push<\/code> commando&#8217;s in commitberichten. Toon van daaruit een waarschuwing of foutmelding voor de gebruiker.<\/li>\n<\/ul>\n<p>Echter, welke praktijken je ook implementeert, ze moeten veilig, effici\u00ebnt en optimaal zijn voor jouw behoeften. Dit vereist een grondige review en teststrategie.<\/p>\n<h3>Git Hooks beoordelen en testen<\/h3>\n<p>Het nakijken en testen van hooks is essentieel om er zeker van te zijn dat ze goed werken en aansluiten op je ontwikkel workflow. Beoordelingen door collega&#8217;s, duidelijke documentatie, een overvloed aan commentaar en meer kunnen ervoor zorgen dat hooks klaar zijn voor productie.<\/p>\n<p>Als het op testen aankomt, is het belangrijk om dit ge\u00efsoleerd te doen met diverse voorbeeldgegevens. Je zou ook geautomatiseerde regressie- of integratietests kunnen implementeren.<\/p>\n<p>Tot slot raden we je aan om hooks te testen in verschillende omgevingen (zoals je <a href=\"https:\/\/kinsta.com\/nl\/devkinsta\/\">ontwikkel-<\/a>, <a href=\"https:\/\/kinsta.com\/nl\/wordpress-hosting\/testomgevingen\/\">test-<\/a> en <a href=\"https:\/\/kinsta.com\/nl\/docs\/wordpress-hosting\/testomgeving\/#push-staging-to-live-1\">productieservers<\/a>) om ervoor te zorgen dat ze consistent gedrag vertonen. Een real-time logging setup zal hierbij helpen, omdat het kan laten zien wat er gebeurt als gegevens van server naar server gaan.<\/p>\n<h2>Problemen met hooks oplossen<\/h2>\n<p>Zoals met elke codebase, kan het zijn dat je ook je hooks moet troubleshooten &#8211; zelfs na een paar pogingen. In feite, wat voor type Git hook je ook hebt, je zult merken dat dezelfde fouten steeds weer opduiken. Veel van deze zullen eenvoudige problemen zijn die invloed hebben op alle soorten projecten, zoals syntaxisfouten, toestemmingsproblemen, het gebruik van relatieve of hardcoded paden, en nog veel meer.<\/p>\n<p>Het is echter ook een goed idee om te controleren op ontbrekende dependencies, omdat sommige hooks afhankelijk zijn van externe tools, bestanden of bibliotheken. Als zodanig moet je ze beschikbaar maken in de omgeving waar je de hook uitvoert.<\/p>\n<p>Er zijn echter specifieke problemen die kunnen opduiken met Git hooks. Bijvoorbeeld, hooks moeten afsluiten met een non-zero statuscode om een mislukking aan te geven. Bovendien zouden hooks geen oneindige loops moeten bevatten. Hiermee kun je namelijk onverwacht gedrag veroorzaken en je workflow verstoren.<\/p>\n<p>Je kunt ook merken dat conflicten tussen twee hooks onbedoelde interacties en gevolgen hebben. Ook zogenaamde <a href=\"https:\/\/www.techtarget.com\/searchstorage\/definition\/race-condition\" target=\"_blank\" rel=\"noopener noreferrer\">&#8216;race conditions&#8217;<\/a> kunnen je verwachtingen verstoren. Dit is wanneer twee of meer hooks door vergelijkbare gebeurtenissen worden geactiveerd, maar de ene eerder wordt voltooid dan de andere &#8211; dit heeft invloed op het eindresultaat dat je verwacht.<\/p>\n<p>Hier zijn reviews en tests van vitaal belang. Het bijhouden van documentatie is ook belangrijk om problemen te voorkomen en ervoor te zorgen dat hooks werken zoals je verwacht.<\/p>\n<p>Over documentatie gesproken, <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Customizing-Git-Git-Hooks\" target=\"_blank\" rel=\"noopener noreferrer\">Git&#8217;s eigen referentiemateriaal<\/a> is essentieel leesvoer. In feite, samen met dit artikel en misschien de onafhankelijke <a href=\"https:\/\/githooks.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git Hooks<\/a> gidssite (met behulp van <a href=\"https:\/\/kinsta.com\/nl\/blog\/github-pages\/\">GitHub Pages<\/a>), zou je niet al te veel leesmateriaal nodig moeten hebben.<\/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=\"De externe Git Hooks-website , met een inleiding tot hooks en een uitleg. Er wordt gebruik gemaakt van zwarte tekst op een witte achtergrond. In de hoek staat het GitHub-symbool, wat aangeeft dat de site wordt gehost op GitHub Pages.\" width=\"1000\" height=\"571\"><figcaption id=\"caption-attachment-166984\" class=\"wp-caption-text\">De GitHooks gids website.<\/figcaption><\/figure>\n<p>Je zou echter ook naar apps kunnen kijken om je te helpen Git hooks te beheren. <a href=\"https:\/\/github.com\/evilmartians\/lefthook\" target=\"_blank\" rel=\"noopener noreferrer\">Lefthook<\/a> heeft regelmatige updates en veel ondersteuning op GitHub, terwijl <a href=\"https:\/\/typicode.github.io\/husky\/\" target=\"_blank\" rel=\"noopener noreferrer\">Husky<\/a> geweldig is voor het linten van je commitberichten.<\/p>\n<h2>De voordelen van het integreren van hooks in continue integratie (CI\/CD) pipelines<\/h2>\n<p>CI\/CD pijplijnen werken goed met Git hooks, omdat die scripts je kunnen helpen taken te automatiseren, consistente kwaliteit te garanderen en veiligheidscontroles te bieden.<\/p>\n<p>Met pre-commit hooks kun je bijvoorbeeld code kwaliteitscontroles uitvoeren, zoals linting, statische analyse en opmaak. Als het op testen aankomt, kun je eenheidstests, testsuites of andere geautomatiseerde controles starten in de pre-commit fase. Aan de andere kant kun je met pre-push hooks integratietests, <a href=\"https:\/\/kinsta.com\/nl\/blog\/website-beveiligingscheck\/\">beveiligingsscans<\/a> en meer uitvoeren.<\/p>\n<p>Er zijn veel voordelen die je kunt halen uit het gebruik van hooks binnen je CI\/CD pipelines:<\/p>\n<ul>\n<li><b>Consistentie.<\/b> Met hooks kun je consistente werkwijzen afdwingen voor alle commits en deployments, wat fouten over de hele linie zal verminderen.<\/li>\n<li><b>Geautomatiseerde controles.<\/b> Je kunt kwaliteitscontroles van code, testen, beveiligingsscans en andere belangrijke taken automatiseren. Dit vermindert handmatige inspanning en zorgt ervoor dat je meer tijd overhoudt voor andere taken.<\/li>\n<li><b>Vroegtijdige probleemdetectie.<\/b> Met hooks kun je problemen in een vroeg stadium van het ontwikkelproces opsporen, waardoor ze zich niet verder kunnen verspreiden in je pipeline.<\/li>\n<li><b>Minder risico&#8217;s bij deployments.<\/b> Met geautomatiseerde controles en tests die worden geactiveerd door hooks, kan het risico van het deployen van foutieve code aanzienlijk worden verminderd.<\/li>\n<\/ul>\n<p>Omdat je met <a href=\"https:\/\/kinsta.com\/nl\/docs\/kinsta-api\/\">Kinsta&#8217;s API<\/a> <a href=\"https:\/\/kinsta.com\/nl\/blog\/ci-cd-pipeline-maken\/\">CI\/CD pipelines<\/a>\u00a0kunt opzetten, kun je ook hier Git hooks integreren. Met Kinsta kun je <a href=\"https:\/\/kinsta.com\/nl\/docs\/wordpress-hosting\/sitebeheer\/git\/\">je hele repo pullen<\/a> vanaf een externe locatie en je kunt pushen met een externe plugin zoals <a href=\"https:\/\/wppusher.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">WP Pusher<\/a>.<\/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=\"De WP Pusher homepage met een blauwe achtergrond, met een slogan en beschrijving voor de plug-in, en een screenshot van het instellingenscherm binnen het WordPress-dashboard.\" width=\"1000\" height=\"525\"><figcaption id=\"caption-attachment-166985\" class=\"wp-caption-text\">De homepage van WP Pusher.<\/figcaption><\/figure>\n<p>Natuurlijk betekent dit ook dat je de optie hebt om Git hooks te gebruiken. Als zodanig kan je Kinsta installatie gebruik maken van deze krachtige scripts binnen je repo.<\/p>\n<h2>Samenvatting<\/h2>\n<p><a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> is een essenti\u00eble tool voor elk ontwikkelproject, maar \u00e9\u00e9n aspect ervan in het bijzonder kan je coderings- en deploymentworkflow een enorme impuls geven. Met Git hooks kun je scripts maken in een aantal talen om verschillende aspecten van je versiebeheerproces te automatiseren. Het is een eenvoudig concept met een ietwat complexe uitvoering.<\/p>\n<p>Ons artikel laat je zien hoe je geavanceerde technieken kunt gebruiken om Git hooks optimaal te benutten. Je kunt ze zowel lokaal als server-side gebruiken, ze dynamisch maken door parameters en variabelen te gebruiken, met meerdere remote repo&#8217;s werken en meer. We gaan zelfs zover dat we stellen dat Git hooks op dit punt wel eens je geheime wapen zouden kunnen worden om de productiviteit, de kwaliteit van de code en de doorlooptijd van je project te verhogen.<\/p>\n<p>Heb je vragen over Git hooks en hoe ze te gebruiken? Laat het ons weten in de commentsectie hieronder!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Git hoeft niet complex te zijn, maar er zijn bepaalde facetten die ingewikkeld zijn en waar je toch wat energie in moet steken om te begrijpen &#8230;<\/p>\n","protected":false},"author":199,"featured_media":56421,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[912],"class_list":["post-56420","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: Geavanceerde technieken en best practices<\/title>\n<meta name=\"description\" content=\"Git biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!\" \/>\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\/nl\/blog\/git-hooks\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices\" \/>\n<meta property=\"og:description\" content=\"Git biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-07T10:13:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-18T16:54:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/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 biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices\",\"datePublished\":\"2023-11-07T10:13:56+00:00\",\"dateModified\":\"2023-12-18T16:54:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/\"},\"wordCount\":4870,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/\",\"name\":\"Git hooks: Geavanceerde technieken en best practices\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"datePublished\":\"2023-11-07T10:13:56+00:00\",\"dateModified\":\"2023-12-18T16:54:54+00:00\",\"description\":\"Git biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"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\/nl\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/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\/nl\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git hooks: Geavanceerde technieken en best practices","description":"Git biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!","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\/nl\/blog\/git-hooks\/","og_locale":"nl_NL","og_type":"article","og_title":"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices","og_description":"Git biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!","og_url":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2023-11-07T10:13:56+00:00","article_modified_time":"2023-12-18T16:54:54+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/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 biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","twitter_creator":"@Kinsta_NL","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Jeremy Holcombe","Geschatte leestijd":"24 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices","datePublished":"2023-11-07T10:13:56+00:00","dateModified":"2023-12-18T16:54:54+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/"},"wordCount":4870,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/","url":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/","name":"Git hooks: Geavanceerde technieken en best practices","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","datePublished":"2023-11-07T10:13:56+00:00","dateModified":"2023-12-18T16:54:54+00:00","description":"Git biedt een manier om aangepaste scripts te gebruiken voor bepaalde repo-gebeurtenissen. Leer meer over Git-hooks, inclusief enkele geavanceerde technieken om ze te gebruiken!","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/git-hooks\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/11\/mastering-git-hooks-advanced-techniques-and-best-practices.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/git-hooks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/git\/"},{"@type":"ListItem","position":3,"name":"Zo krijg je Git hooks onder de knie: Geavanceerde technieken en best practices"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","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\/nl\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/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\/nl\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/56420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=56420"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/56420\/revisions"}],"predecessor-version":[{"id":57446,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/56420\/revisions\/57446"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/translations\/es"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/56420\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/56421"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=56420"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=56420"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=56420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}