Miten hookit toimivat?

Git kutsuu hook-ohjelmia määritellyissä elinkaaren vaiheissa. Tärkeimmät periaatteet:

  • Hookit sijaitsevat oletuksena $GIT_DIR/hooks-kansiossa tai hakemistossa, jonka olet asettanut core.hooksPath-asetuksella.
  • Git jättää huomiotta hookit, joilta puuttuu suoritusoikeus.
  • pre-commit-hook voi keskeyttää commitin palauttamalla nollasta poikkeavan paluuarvon; commit-msg voi hylätä viestin ja post-commit suoritetaan commitin jälkeen.

Gitin virallinen kirja jakaa hookit asiakaspuolen ja palvelinpuolen hookkeihin. Esimerkkitiedostot kansiossa päättyvät .sample-päätteeseen: poista pääte ja anna tiedostolle suoritusoikeus ottaaksesi sen käyttöön.

Yksinkertainen pre-commit-esimerkki

Luo tiedosto .git/hooks/pre-commit ja anna sille suoritusoikeus. Skriptin sisältö:

#!/bin/sh
git diff --cached --check

Tämä tarkistaa indeksissä olevat muutokset esimerkiksi välilyöntivirheiden varalta. Ota hook käyttöön komennolla chmod +x .git/hooks/pre-commit.

Jos hook palauttaa virheen, commit keskeytyy ja saat virheilmoituksen komentoriville.

Huomioita

  • Asiakaspuolen hookit eivät siirry kloonauksen mukana, joten ne eivät yksin riitä tiimin sääntöjen valvontaan. Voit jakaa hookit projektissa ja ohjata Gitin hakemistoon komennolla git config core.hooksPath .githooks.
  • Windowsissa skriptin on käytettävä koneella saatavilla olevaa tulkkia (esim. sh Git Bashin mukana).
  • Hookit täydentävät CI-putkea kehittäjän koneella, mutta eivät korvaa sitä.

Lue lisää Gitin virallisesta hook-dokumentaatiosta ja Git-kirjan hook-luvusta.