Git-hooks på serversiden
Udforsk hooks på serversiden som `pre-receive` og `update` til håndhævelse af politikker og automatisering i hele repositoriet
Git-hooks på serversiden er en gratis Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Avanceret Git: Monorepoer, undermoduler og arbejdsgange, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset indeholder 4 lektioner i alt.
Velkommen til serverside-hooks
I den foregående lektion lærte vi om Git-hooks på klientsiden. Nu skal vi se nærmere på serverside-hooks, som fungerer på selve Git-serveren.
Disse hooks er effektive værktøjer til at håndhæve politikker for hele lageret og automatisere opgaver, før eller efter ændringer accepteres i det centrale lager.
Klient- kontra server-hooks
Den vigtigste forskel mellem hooks på klientsiden og serversiden er, hvor de kører:
- Hooks på klientsiden: Kører på din lokale maskine før handlinger som commit eller push. De hjælper med at håndhæve lokale bedste praksisser.
- Hooks på serversiden: Kører på den centrale Git-server, efter du har pushet ændringer, men før de er fuldt integreret. De sikrer, at regler for hele repositoriet overholdes af alle.
Hooks på serversiden giver en stærkere garanti for, at alle bidragydere følger reglerne.
Hvor server-hooks findes
Hooks på serversiden ligger i mappen hooks i dit bare repository på serveren.
Et bare repository er et repository uden en arbejdsmappe – det indeholder kun Git-metadata. Når du pusher til en remote, pusher du til et bare repository.
Ligesom hooks på klientsiden er de eksekverbare scripts, som Git kører på bestemte tidspunkter i arbejdsgangen.
Hooket 'pre-receive'
Hooket pre-receive er et af de mest brugte hooks på serversiden. Det kører én gang pr. push, før referencer som branches eller tags opdateres.
Det modtager en liste over alle referencer, der pushes, samt deres gamle og nye commit-id'er. Hvis dette script afsluttes med en status, der ikke er nul, afvises hele push-handlingen, og ingen referencer opdateres.
Det gør hooket velegnet til at håndhæve globale politikker.
'pre-receive' i praksis
Hooket pre-receive er perfekt til:
- Håndhævelse af navngivningskonventioner for branches: Alle nye branches skal f.eks. begynde med "feature/", "bugfix/" osv.
- Validering af commit-beskeder: Sikre, at alle commit-beskeder indeholder et ticket-id eller følger et bestemt format.
- Forhindring af push til beskyttede branches: Blokere direkte push til
mainellerdevelop. - Kontrol af kode for følsomme oplysninger: Grundlæggende scanning efter legitimationsoplysninger.
Eksempel: Bloker direkte push til main
Her er et konceptuelt eksempel på et pre-receive-script, der forhindrer direkte push til branchen main. Hvis nogen forsøger at pushe til main, bliver push-handlingen afvist.
Scriptet placeres som pre-receive i serverens bare repositorys mappe hooks og gøres eksekverbart.
#!/bin/sh
while read oldrev newrev refname
do
if [ "$refname" = "refs/heads/main" ]; then
echo "ERROR: Direct pushes to 'main' branch are forbidden."
echo "Please use a pull request workflow."
exit 1
fi
done
exit 0Hooket 'update'
Hooket update minder om pre-receive, men kører én gang for hver reference, der opdateres af en push-handling.
Det tager tre argumenter: referencens navn, det gamle objektnavn og det nye objektnavn. Hvis et update-script afsluttes med en status, der ikke er nul, afvises kun opdateringen af den pågældende reference.
Det giver mere detaljeret kontrol over opdateringer af individuelle branches.
'update' i praksis
Hooket update er nyttigt til:
- Håndhævelse af fast-forward-merges: Forhindre ikke-fast-forward-push til bestemte branches og dermed sikre en lineær historik.
- Implementering af detaljeret adgangskontrol: Tillade bestemte brugere kun at pushe til bestemte branches.
- Logning af opdateringer: Registrere hver branch-opdatering til revisionsformål.
- Forhindring af force-push: Sikre, at historikken ikke omskrives på kritiske branches.
Konfiguration af server-hooks
Sådan implementerer du hooks på serversiden:
- Få adgang til serveren: Du skal have SSH-adgang eller tilsvarende adgang til repositoriet på Git-serveren.
- Find mappen hooks: Gå til mappen
.git/hooksi dit bare repository. - Opret eller rediger scripts: Skriv dit hook-script, f.eks.
pre-receiveellerupdate. - Gør scriptet eksekverbart: Sørg for, at scriptet har køretilladelser, f.eks.
chmod +x pre-receive.
Husk, at disse ændringer påvirker alle, der arbejder med repositoriet.
Bedste praksisser og sikkerhed
Når du arbejder med hooks på serversiden:
- Hold dem enkle: Kompliceret logik kan være svær at fejlsøge og vedligeholde.
- Brug versionsstyring til hooks: Overvej at gemme dine hook-scripts i et separat repository og implementere dem på dine Git-servere for at sikre ensartethed.
- Test grundigt: Sørg for, at dine hooks ikke utilsigtet blokerer legitime arbejdsgange.
- Tag højde for ydeevnen: Hooks kører ved hver push, så undgå ressourcekrævende operationer.
De er effektive, så brug dem med omtanke!
Hurtigt tjek
Hvilket af følgende scenarier håndteres bedst af et pre-receive-hook frem for et update-hook?
Opsummering: Hooks på serversiden
Du har udforsket mulighederne i Git-hooks på serversiden! Vi har lært:
- Hooks på serversiden håndhæver politikker på den centrale Git-server.
pre-receivekører én gang pr. push og er velegnet til globale kontroller.updatekører én gang pr. reference og er velegnet til detaljeret kontrol.- Implementeringen består i at placere eksekverbare scripts i det bare repositorys mappe
hooks.
Disse hooks er afgørende for at bevare kodekvalitet og ensartede arbejdsgange i teammiljøer. Bliv ved med at øve dig!
Lær Avanceret Git: Monorepoer, undermoduler og arbejdsgange med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Git-hooks på serversiden” gratis?
Ja — hele teksten til “Git-hooks på serversiden” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset, skal du opgradere til CoddyKit PRO. Avanceret Git: Monorepoer, undermoduler og arbejdsgange-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Git-hooks på serversiden”?
Udforsk hooks på serversiden som `pre-receive` og `update` til håndhævelse af politikker og automatisering i hele repositoriet Du øver dig i Avanceret Git: Monorepoer, undermoduler og arbejdsgange med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Avanceret Git: Monorepoer, undermoduler og arbejdsgange?
Der kræves ingen tidligere erfaring. Avanceret Git: Monorepoer, undermoduler og arbejdsgange på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Git-hooks på serversiden”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektion?
Ja. Alle Avanceret Git: Monorepoer, undermoduler og arbejdsgange-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Git-hooks på klientsiden
- Git-hooks på serversiden
- Git-konfiguration og aliases
- Deling af hooks med teamet ved hjælp af Husky