gå 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.
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.
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.
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.
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.
- Gå til Git repository som du ønsker å beskytte.
- 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
- åpen krok fil ny i tekstredigerer.
nano .git/hooks/pre-push
- 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
- Lagre ny krok. i en nano Gjør det ved å trykke Ctrl + O , Deretter Ctrl + X.
- 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.
Løs dette ved å lage en "pre-receive"-krok som automatisk forhindrer at en begrenset bruker blir presset til mastergrenen.
- Skape Git hook-fil for "pre-acquisition" i ditt fjernlager.
trykk på .git/hooks/pre-receive
- åpne denne fil.
nano .git/hooks/pre-receive
- 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
- Lagre den nye krokfilen. I mitt tilfelle må jeg trykke Ctrl+O, deretter Ctrl+X for å lagre filen.
- 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.
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.
Du kan forhindre dette problemet ved å opprette en "pre-reetabler"-krok som vil sjekke om den gjeldende grenen er stengt eller ikke.
- opprettet "pre-rebase"-fil i en katalog «.git/hooks»:
trykk på .git/hooks/pre-rebase
- åpne denne fil for redigering.
nano .git/hooks/pre-rebase
- 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
- 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.
- å relatere lanterne til Git-depotet ditt, lag først en hook-fil "Tidligere forpliktelse".
trykk på .git/hooks/pre-commit
- installere lanterne passer til språket i prosjektet ditt. I dette tilfellet bruker jeg "shellcheck" For å analysere min Bash-kode:
sudo apt installer shellcheck
- å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
- 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.
- Skape kroker fil "post-mottaker" i en katalog .git / kroker på ditt lager:
trykk på .git/hooks/post-receive
- å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
- 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?
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.