Git hooks + Vsts: automatyczne łączenie zadania z commitem

Jeśli w projekcie używasz gita (do przechowywania kodu) i Visual Studio Team Services (do zarządzania zadaniami) to ten post jest dla Ciebie. Pokażę w nim jak automatycznie łączyć zadania z VSTS z commitami dzięki git hooks.

Git hooks

W gicie istnieje coś takiego jak git hooks. Są to skrypty wyzwalane w przypadku, gdy wystąpi jakaś akcja w git, np.: hook pre-commit zostanie wywołany przed wykonaniem polecenia git commit.

Hooki (będę pisał nazwę angielską, nie będę próbował spolszczać tego słowa na siłę 🙂 ) dzielą się się na dwa typy: po stronie klienta oraz serwera. Hooki po stronie klienta to np.: wcześniej wspomniany pre-commit lub prepare-commit-message. Po stronie serwera występują takie hooki jak: pre-receive, który wyzwala się po komendzie git push.

Ten wpis jednak nie jest o hookach. Więcej o hookach można przeczytać w dokumetancji: Git hooks

Jak to ma działać?

Aby to wszystko mogło zadziałać, trzeba przyjąć odpowiednie nazewnictwo dla feature branchy. W tym przypadku numer zadania w naszym systemie powinien być na samym końcu nazwy brancha, po myślniku np. my_feature-235

Skrypt z nazwy brancha będzie wyciągał numer taska, czyli 235 i wpisywał go do commit message w postaci #235.

Jak skonfigurować?

VSTS:

Na początku musimy włączyć odpowiednią opcję w ustawieniach VSTS. W tym celu wchodzimy w ustawienia projektu, następnie wybieramy zakładkę Version Control. W opcjach naszego repozytorium włączamy opcję: “Automatically create links for work items mentioned in a commit comment.”
vsts work item options

GIT

Skrypty znajdują się w katalogu .git\hooks projektu. Przy tworzeniu repozytorium tworzą się od razy przykładowe skrypty. Pliki mają dopisane rozszerzenie .sample. Aby ich użyć wystarczy zmienić nazwę pliku.

git hook samples

Skrypt

Do automatycznego dodawania numeru zadania do commit message użyłem hooka  pre-commit-msg. Skrypt wygląda następująco:

O co chodzi?

Według numerów linii:

1: Informacja w jakim języku jest napisany skrypt. Ten jest napisany w shellu. Można również w Pythonie lub innym języku skryptowym.
3: Pobranie nazwy brancha.
4: Pobranie numeru zadania z nazwy bracha.
6: Pobranie commit message.
8: Sprawdzenie czy numer zadania nie jest pusty.
9: Sprawdzenie czy commit message nie jest pusty.
10: Wpisanie numeru zadania do commit message.
11: Sprawdzenie czy w commit message jest już numer zadania. Sytuacja może wystąpić, jeśli użyliśmy polecenia git commit --amend --no-edit
12: Doklejenie numeru zadania na końcu wpisanego przez Nas commit message.

Skrypt działa zarówno dla polecenia git commit jak i git commit --amend.

Mam nadzieję, że ten skrypt się komuś przyda.

Jeśli spodobał Ci się ten wpis i chcesz otrzymywać powiadomienia o nowych treściach dotyczących zagadnień związanych z Gitem, to zachęcam do subskrypcji mojego bloga.

2 thoughts on “Git hooks + Vsts: automatyczne łączenie zadania z commitem

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *