Jannah-tema Lisensen er ikke validert. Gå til siden for temaalternativer for å validere lisensen. Du trenger en enkelt lisens for hvert domenenavn.

Git Hooks er enkle å administrere depotet ditt

Det er et flott verktøy. Den lar deg ikke bare spore endringer i en fil gjennom kroker, men også samarbeide sømløst med andre mennesker. I denne forbindelse er Git et av verktøyene som har skjøvet frem utviklingen av FOSS. Et av de største problemene med Git er imidlertid at det tar tid og krefter å administrere depotene dine. For eksempel kan kjøring og synkronisering av disse repositoriene ta to til tre git-kommandoer. Dette gjør det ikke bare kjedelig å administrere dem, men også utsatt for brukerfeil. Her viser vi deg noen enkle, men kraftige Git-hooks for å bedre administrere depotene dine.

5-git-hooks-00-featured-image-800x400.jpg Enkle Git-hooks for å administrere repositoriet ditt

Hva er Git Hooks?

I kjernen er git-hook en fleksibel underkommando som du kan bruke til å lage tilpassede skript som kjører når Git utfører en handling på depotet. For eksempel er det mulig å bruke hook for automatisk å sjekke depotet ditt for stilfeil før du begår det.

5-git-hooks-02-example-linter.png Enkle Git-hooks for å administrere repositoriet ditt

Hook-underkommandoen fungerer ved å lese "hooks"-mappen under ".git"-katalogen til depotet. Denne mappen inneholder en rekke forhåndslagde filer som gir et eksempelskript for hver Git-handling som du kan kjøre automatisk.

5-git-hooks-03-default-hooks-directory.png Enkle Git-hooks for å administrere depotet ditt

For det meste kan du skrive git hook i et hvilket som helst skriptspråk du ønsker. Dette gjør den utrolig fleksibel og tilgjengelig for enhver programvareutvikler.

1. Forhindre dytting for å mestre

En av de vanligste feilene en bruker gjør i Git er å skyve en commit fra utviklingsgrenen direkte inn i master. Dette kan være utrolig frustrerende hvis du bruker Github til å spore og vedlikeholde prosjektene dine.

Les også:  Hvordan foretar man lydsamtaler med Google Meet?

5-git-hooks-04-example-git-push.png Enkle Git-hooks for å administrere repositoriet ditt

Du kan forhindre dette problemet ved å lage et pre-push som vil sjekke og bekrefte hver gang du prøver å skyve et depot fra hovedgrenen.

  1. Gå til Git repository som du ønsker å beskytte. 5-git-hooks-05-cd-to-repository.png Enkle Git-hooks for å administrere repositoriet ditt
  2. Skape Git hook-fil ved hjelp av korrekturleseren din. Siden denne kroken må kjøres før "å presse" , så må du lage en krok "forhåndsbetalt":
    trykk på .git/hooks/pre-push
  3. åpen krok fil ny i tekstredigerer.
    nano .git/hooks/pre-push
  4. Inni, skriv hekte "før betaling". Følgende er for eksempel et skript som vil be deg om bekreftelse når du trykker fra hovedgrenen:
    #!/bin/sh protect='master' current=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') if [ $protect = $current ] les deretter -p "Bekreft trykk for å mestre? J/n." -n 1 -r < /dev/tty echo if echo $REPLY | grep -E '^[Yy]$' > /dev/null deretter exit 0 fi exit 1 else exit 0 fi
  5. Lagre ny krok. i en nano Gjør det ved å trykke Ctrl + O , Deretter Ctrl + X. 5-git-hooks-07-pre-push-hook-filled.png Enkle Git-hooks for å administrere repositoriet ditt
  6. Kjør følgende kommando for å sikre at Git kan kjøre den nye kroken.
chmod +x .git/hooks/pre-push

2. Avvis skyver til hovedgrenen

Bortsett fra å forhindre at du blir presset til masteren, kan du også lage en krok på serversiden som vil avvise alle push til master-grenen. Dette er utrolig nyttig hvis du deler et depot med flere utviklere.

5-git-hooks-08-git-log-sample.png Enkle Git-hooks for å administrere repositoriet ditt

Løs dette ved å lage en "pre-receive"-krok som automatisk forhindrer at en begrenset bruker blir presset til mastergrenen.

  1. Skape Git hook-fil for "pre-acquisition" i ditt fjernlager.
    trykk på .git/hooks/pre-receive
  2. åpne denne fil.
    nano .git/hooks/pre-receive
  3. Legg til avvisningstekst hekte "forhåndskvittering". Følgende kodelinjer bør for eksempel fungere rett ut av esken:
    #!/bin/sh branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') blacklist=(alice bob) if [[ ${blacklist[ *]} =~ $BRUKER ]]; then if [ "$branch" == "master" ]; deretter ekko "Du har ikke lov til å foreta endringer i denne grenen" exit 1 fi fi
  4. Lagre den nye krokfilen. I mitt tilfelle må jeg trykke Ctrl+O, deretter Ctrl+X for å lagre filen.
  5. Lagre hekte tekst og gjøre det handlingsdyktig.
chmod +x .git/hooks/pre-receive

Tips: Du kan også bruke Git-aliaset for å gjøre bruken av Git mer effektiv.

Les også:  Hvordan gjenopprette et glemt Gmail-passord

3. Lås depotet fra rebasing

En annen vanlig feil en bruker gjør i Git er å tilbakestille den aktive grenen. Dette kan være et frustrerende problem hvis du jobber med et depot med mange bidragsytere, siden refaktorering vil fjerne forpliktelser fra andre brukere.

5-git-hooks-11-git-rebase-man-page.png Enkle Git-hooks for å administrere repositoriet ditt

Du kan forhindre dette problemet ved å opprette en "pre-reetabler"-krok som vil sjekke om den gjeldende grenen er stengt eller ikke.

  1. opprettet "pre-rebase"-fil i en katalog «.git/hooks»:
    trykk på .git/hooks/pre-rebase
  2. åpne denne fil for redigering.
    nano .git/hooks/pre-rebase
  3. Legg til skriptet overkjørt innsiden ny krokfil.
    #!/bin/sh branch="$2" [ -n "$branch" ] || branch=$(git rev-parse --abbrev-ref HEAD) lock="branch.${branch}.rebaselock" if [ "$(git config --bool "$lock")" = true ]; deretter echo "pre-rebase hook: \"$lock\" er satt til true. Nekter å rebase." utgang 1 fi
  4. Lagre krok fil ny og gjør den kjørbar.
chmod +x .git/hooks/pre-rebase

4. Tving en stil- og syntakssjekk på koden din

En av de mest nyttige bruksområdene til hook Git er å koble den til linter-kode. Dette er et enkelt program som sjekker om koden din følger stilen og formatet til prosjektet.

5-git-hooks-14-shellcheck-man-page.png Enkle Git-hooks for å administrere depotet ditt

  1. å relatere lanterne til Git-depotet ditt, lag først en hook-fil "Tidligere forpliktelse".
    trykk på .git/hooks/pre-commit
  2. installere lanterne passer til språket i prosjektet ditt. I dette tilfellet bruker jeg "shellcheck" For å analysere min Bash-kode:
    sudo apt installer shellcheck
  3. åpen krok fil ny og legg til følgende skript.
    #!/bin/bash for fil i $(git diff --cached --name-only --diff-filter=AM | grep -E '\.sh$') do shellcheck "$file" # Kjør linter for hver ny fil. hvis [$? -ne 0]; deretter avslutt 1 # Avslutt commit hvis linter svikter. fi ferdig
  4. Lagre krok fil ny og gjør den kjørbar:
    chmod +x .git/hooks/pre-commit

5. Varsle brukere automatisk med endringer i depotet

Til slutt kan du også lage en Git-hook som automatisk sender en e-post når depotet ditt mottar en ny commit. Dette er nyttig hvis du vil lage et enkelt varslingssystem for depotet ditt.

  1. Skape kroker fil "post-mottaker" i en katalog .git / kroker på ditt lager:
    trykk på .git/hooks/post-receive
  2. åpen Git hook-fil ny og skriv inn følgende skript:
    #!/bin/sh commit_message=$(git log -1 --pretty=%B) users=("[e-postbeskyttet]""[e-postbeskyttet]""[e-postbeskyttet]”) for bruker i «${users[@]}»; send mail -s «New Commit: $commit_message» $user < /dev/null ferdig
  3. Lagre krok fil ny og gjør den kjørbar.
    chmod +x .git/hooks/post-receive

ofte stilte spørsmål

Q1. Kan jeg skrive Git-hooks på et kompilert språk, for eksempel C?

Les også:  Slik deler du Google-kalenderen din med andre

svar. En av de største begrensningene til Git Hooks er at det krever at du bruker et språk som du kan kjøre direkte fra terminalen. Dette betyr at Git-hooks ikke støtter noen lokaliserte språk for skriptene deres. Du kan for eksempel lage nye Git-hooks ved å bruke Python eller Shell og ikke C eller C++.

Q2. Er det mulig å kjøre flere hooks i samme Git-depot?

svar. Ja. Mens eksemplene ovenfor viser kroker som separate individuelle funksjoner, kan du enkelt blande dem sammen for å lage din egen unike arbeidsflyt, noe som gjør Git hooks utrolig fleksible og tilpasningsdyktige til enhver kodesituasjon. For eksempel kan du bruke både "Prevent Push to Master"-kroken og "Syntax Check"-precommit-kroken i depotet ditt.

Q3. Hvorfor sender ikke Git hooks e-post til brukere?

svar. Dette problemet skyldes sannsynligvis at den eksterne serveren din ikke kan sende utgående e-poster på riktig måte. For å fikse dette, sørg for at den eksterne serveren din er sikker og har en e-postleveringsagent som fungerer sammen med et SMTP-domene.

Gå til toppknappen