Branch'o vardo tikrinimas GIT Hook'e

2015 lapkričio 03 d. GIT

Praėjusiame straipsnyje rašiau apie GIT PUSH komandą projektui atnaujinti. Pratęsiant temą, šiame straipsnyje aprašysiu kaip į Hook’ą įvesti tam tikros (kokybės?) kontrolės.

Labai svarbu kas yra įkeliama į projektą. Galbūt „testing“ ir „development“ aplinkose galėsite sau leisti turėti bet kokį branch’ą, bet pavyzdžiui „staging“ tikriausiai norėsite tik master (ar kitokio, iš anksto numatyto, branch’o). Todėl bus svarbu užtikrinti, kad niekas į tą versiją nepakliūtų, o programuotojai būtų informuoti apie tai, kas bandoma padaryti.

Tą nesunkiai užtikrinsite dar vieno GIT Hook’o pagalba: pre-receive (failas .git/hooks/pre-receive):

#!/bin/bash

while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]]
    then
        git checkout -f
    else
        echo "Klaida - įkeliamas branch'as turi būti master."
        exit 1
    fi
done

Būtina atkreipti dėmesį, kad Hook’ai nėra pašalinės komandos (angl. „external source“), o įterptinės. Dėl to, negalėsite pasiekti komandos argumentų iš komandinės eilutės, bet reikės naudotis trimis kintamaisiais iš kvietimo pusės. Šiame pavyzdyje tai oldrev, newrev ir ref. Pavadinimai turėtų būti pakankamai suprantami, kad suprasti ką jie savyje laiko.

Ir aišku, pasinaudodami ref nesunkiai galėsime patikrinti ar pakeitimai ateina į tą branch’ą į kurį tikimasi. Jeigu ne, tai programuotojui bus parodomas pranešimas (net ir tada, kai vykdoma „tyli“ komanda git push -q). O exit 1 pasirūpina, kad GIT nepriimtų pakeitimų į nuotolinę repozitoriją.