Git Hooks

Git er et kraftig versjonskontrollsystem som vi knapt har skrapet overflaten på de siste innleggene våre. I dag skal vi se på automatiseringskraften som Git kan gi deg med Git Hooks.

Hvert depot får kroker innebygd når du bruker git init-kommandoen. Når et depot er initialisert får du en skjult .git-katalog og inne i den er en katalog kalt hooks som vil inneholde alle dine hooks. Åpne et hvilket som helst git-lager du har til rådighet og bruk ls -a for å se den skjulte katalogen, og åpne den deretter i din favorittkoderedigerer.

For å starte vil du se en haug med filer med .sample filtypenavn. Dette er nøyaktig hva de sier, eksempelskript som du kan bruke i prosjektene dine. Filene er navngitt for å korrespondere med kroken de kjører på. Så post-commit.sample kjører på post-commit-kroken.

Du kan bruke stort sett alle språk for å skrive en krok. Filen analyseres i henhold til shebang notasjon øverst i filen. Hvis du ønsket å bruke node, ville du brukt #! /usr/bindi/env node og filen din vil bli analysert som en nodefil.

Før vi dykker inn i hva du kan gjøre med git-hooks, la oss ta en titt på noen av krokene som er tilgjengelige for deg.

Typer Git Hooks

Commit Workflow Hooks

pre-commit kjøres før du selv skriver inn commit-meldingen, og den kan omgås med git commit –no-verify.

prepare-commit-msg kan brukes til å redigere standardmeldingen du ser i commit-meldingen. Bruk den til å gi instruksjoner til utviklere om hvilken type forpliktelsesmelding de bør legge igjen. Den kan også brukes til å automatisere innholdet i hvor meldingen genereres automatisk for deg, for eksempel sammenslåinger eller til å legge til et problemnummer til commit-meldingen din automatisk.

Å lese:  Introduksjon til Git

commit-msg kan brukes til å validere commit-meldingen for prosjektet ditt. Kanskje du ikke vil at noen skal være i stand til å legge inn en commit-melding som bare sier “å håndtere mellomrom”. Du kan bruke denne kroken til å oppdage tilstedeværelsen av ordene white space og deretter avslutte og gi en advarsel til brukeren om at de må ha en bedre commit-melding.

post-commit-løper etter alle commit-krokene ovenfor. Det er mest nyttig for et varsel om at en forpliktelse er foretatt.

Klientkroker

post-checkout kjører etter at du har kjørt en vellykket git checkout-kommando. Hvis du hadde et sett med store filer brukt på nettstedet, men ikke ville ha dem i kildekontroll, kan du bruke denne kommandoen til å flytte filene for deg.

pre-push kjører under en git push-kommando før noen objekter overføres til det eksterne depotet.

Serverkroker

pre-receive kjører når en klient har pushet kode til et eksternt depot. Dette kan brukes til å sjekke koden som blir pushet for å sikre at den oppfyller kriteriene til prosjektet ditt før du godtar pushet.

post-mottak kjører etter at det eksterne depotet har mottatt oppdateringene. Dette kan brukes til å ringe en web-hook som utløser en distribusjonsprosess eller varsle et chatterom om at en commit er mottatt og er klar for vurdering.

Mange av krokene ovenfor kan settes til å kjøre kun på bestemte grener. Det kan bety at når du bruker en post-mottakskrok bare når noen har presset kode til hovedgrenen som skal være klar til å distribueres. En liste over utviklere kan bli varslet for å se gjennom koden og deretter distribuere den. På denne måten vil du alltid ha 2 sett med øyne på en distribusjon, noe som kan bety å fange feil som en enkelt utvikler lett kan gå glipp av.

Å lese:  4 trinn for å samarbeide med WordPress-frilansere

Jeg har hoppet over noen av krokene som er tilgjengelige fordi jeg aldri har sett et behov for å bruke dem. Et sett med kroker jeg ikke snakket om er e-postarbeidsflytkrokene. Hvis du ikke godtar patcher til koden din via e-post, vil du sannsynligvis aldri trenge dem. Du finner alle tilgjengelige kroker i dokumentasjonen.

I praksis kroker jeg har brukt mest er:

  • forhåndsinngå
  • pre-push
  • commit-msg
  • forhåndsmotta
  • etter forpliktelse
  • etter mottak

La oss nå gjøre noe med disse krokene.

Aktivering av en WordPress-plugin med WP Cli og Git Hooks

For ett kundeprosjekt i år la jeg til en butikk, og gjorde fortsatt noen få oppgaver på hovedsiden. Det betydde at hovedsiden gjorde det ikke ha noen av våre WooCommerce-plugins installert eller aktivert. Jeg trengte å utvikle WooCommerce-butikken på én filial, og bare når jeg var klar til å presse det hele live, ønsket jeg å flytte WooCommerce over til main.

For å starte trenger vi en ny filial kalt butikk. Vi kan få dette ved å bruke git checkout -b store. Dette oppretter en ny filial og sjekker den ut for oss. La oss nå gjøre kroken klar.

Først må vi opprette post-checkout-kroken med denne kommandoen, trykk på .git/hooks/post-checkout.

Deretter må vi gjøre det kjørbart. Vi kan gjøre dette med chmod-kommandoen fra terminal chmod +x .git/hooks/post-checkout.

Å lese:  8 beste WooCommerce-abonnementsplugins

Åpne nå filen i det valgte koderedigeringsprogrammet og kopier koden nedenfor til filen etter utsjekking.

#! /bin/bash

wp-plugin aktiverer woocommerce

ekko “aktivert WooCommerce”

wp-plugin aktiverer automatewoo

ekko “aktivert AutomateWoo”

Du kan demonstrere dette ved å bytte til hvilken som helst filial via terminal. Du bør se to linjer som forteller deg at WooCommerce og AutomateWoo er aktivert. Vi vet at det fungerer, men det er ikke helt det vi ønsker fordi det vil slå på pluginene hver gang vi bytter til en hvilken som helst gren.

Det vi egentlig ønsker er å slå dem på når vi flytter til butikkfilialen vår, og deretter slå dem av når vi er på hovedavdelingen vår. For å gjøre det trenger vi kroken for å oppdage hvilken gren vi er en. Bytt ut innholdet etter utsjekking med koden nedenfor.

#! /bin/bash

olddrev=$1
newrev=$2

branch_name=”(git symbolic-ref HEAD 2>/dev/null)”

hvis [ “refs/head/store” = “$branch_name” ];deretter
wp-plugin aktiverer woocommerce
ekko “aktivert Woo”

wp-plugin aktiverer automatewoo
ekko “aktivert AutomateWoo”
fi

hvis [ “refs/head/main” = “$branch_name” ];deretter
wp-plugin deaktiver woocommerce
ekko “deaktivert Woo”

wp plugin deaktiver automatewoo
ekko “deaktivert AutomateWoo”
fi

Denne koden starter med å tilordne grenen vi sjekker ut til variabelen branch_name. Så har vi to if-utsagn. Den første sjekker om vi har flyttet til butikkfilialen. Hvis vi har det bruker WP CLI for å aktivere WooCommerce og AutomateWoo.

Den neste if-setningen sjekker om vi er på hovedgrenen. Hvis vi er det, vil den deaktivere pluginene med WP CLI og fortelle oss om det i terminalen.

Kontrollere Git-arbeidsflyter med Git Hooks

I et tidligere innlegg på Git snakket jeg om forskjellige Git-arbeidsflyter. En veldig vanlig brukssak for kroker er å stoppe noen fra å begå kode direkte til hovedgrenen. Du kan bruke en krok for å sikre at all kode er slått sammen fra en annen gren til hoved.

Å lese:  Er administrert WordPress-hosting riktig for meg?

Start med å gi nytt navn til pre-commit.sample til pre-commit og gjør den deretter kjørbar som jeg har beskrevet ovenfor. Ta deretter tak i koden nedenfor og bruk den i pre-commit-filen.

#! /bin/bash

brukernavn=$GIT_AUTHOR_NAME
branch=”$(git symbolic-ref HEAD 2>/dev/null)”

hvis [ “$branch” = “refs/heads/main” ]; deretter
echo “WHOA det var ‘”${branch}”‘ du bør ikke gjøre det. Slutt å gjøre dumme ting og lag din egen gren og slå den sammen.”
exit 1 # hvis du fjerner dette vil det ikke blokkere commit, men det vil sende meldingen til slack
fi

Dette sjekker for å se om vi er på hovedgrenen, og hvis vi er det, stoppes commit. Deretter skriver den ut en påminnelse til brukeren om at de ikke skal forplikte seg direkte til hovedavdelingen.

Husk at mange steder endres til hoved som sin filial. Eldre prosjekter kan trenge master på plass her hvis de ikke har oppdatert.

Du kan til og med ta dette et skritt videre og bruke curL for å få tilgang til API-en til en chat-app og deretter klage offentlig over at noen prøvde å forplikte seg til main.

De eneste begrensningene til git-hooks er fantasien din. Du kan bruke dem til å stoppe noen fra å forplikte seg hvis en TODO er til stede i koden deres eller til stopp mellomrom på slutten av en fil.

Hvis du har en del av arbeidsflyten din som er en kontinuerlig snublestein, se på kroker for å automatisere den, slik at du ikke trenger å huske.

Nye publikasjoner:

Anbefaling