GIT HOOK'as įrašantis užduoties ID automatiškai

2015 gruodžio 01 d. GIT

Jeigu darbui naudojate Git Flow Jums bus pažįstamas branchų versijavimas ir kam ir kodėl jis reikalingas. Jeigu nenaudojate - siūlyčiau pasekti nuorodą ir susipažinti. Ši darbų eiga tikrai gali Jums padėti pasidaryti tokią programavimo darbų eigos architektūrą, kuri gerokai patobulintų darbo kokybę ir sudarytų tinkamą, šiuolaikišką ir patogią struktūrą versijuojant projektus.

Daug kam bus nesvetimas ir užduoties ID rašymas commit žinutėse. Kaip užtikrinti, kad visos commit žinutės turėtų užduoties ID - jau rašiau praėjusiame straipsnyje. Kad nereiktų ilgai galvosit, atsidarinėti naršyklės ir ieškoti savo „track’o“ su užduoties ID siūlau jį rašyti branchų varduose, pavyzdžiui:

git branch feature/2911-users-api
git branch hotfix/3341-aws-sync-large-files

Na, ir galiausiai susikurkime tokį Hook’ą faile .git/hooks/prepare-commit-msg:

#!/bin/bash

# if it contains some number in branch name - use it as ticket ID
TICKET=$(git symbolic-ref HEAD | sed 's/[^0-9]*//')
if [ -n "$TICKET" ]
then
    mv "$1" "$1.bak"
    echo "#$TICKET " > "$1"
    cat "$1.bak" >> "$1"
    rm -f "$1.bak"
fi

Ir būtinai suteikime šiam failui vykdymo teises su chmod +x .git/hooks/prepare-commit-msg.

Aiškinti šiame hook’e nelabai yra ką. Komanda git symbolic-ref HEAD yra viena iš daugelio, kurią galima panaudoti brancho vardui išgauti. Šiame skripte “$1” yra laikinas failo vardas kurį sukuria GIT tam, kad vėliau atidarytų jį su redaktoriumi ir lauktų, kol redaktorius užsidarys, kad galėtų pratęsti commit’ą.

Taigi, jeigu Jūsų branch’o vardas turi savyje skaičius, jie bus panaudoti kaip užduoties ID ir prirašyti commit žinutėje kai atidaromas redaktorius (taigi, git commit -m čia netiks - šiai komandai kada nors vėliau parodysiu kitą skriptą).

Pavyzdžiui esant branche feature/6544-allow-login-using-fb po pakeitimų parašius git commit bus matoma redaktoriuje:

#6544

* Please enter the commit message for your changes. Lines starting
* with '*' will be ignored, and an empty message aborts the commit.
[..]

Per kelis metus šis hook’as man sutaupė rekordiškai daug laiko. Tikrai siūlau išbandyti.