Chip komputerowy Olimpiada
informatyczna

Automatyzacja jakości kodu: linting, formatowanie, pre-commit hooks

Data dodania: 3 stycznia, 2026 / Aktualizacja: 21 sierpnia, 2025
Automatyzacja jakości kodu: linting, formatowanie, pre-commit hooks Automatyzacja-jakosci-kodu-linting-formatowanie-pre-commit-hooks

Ten tekst wyjaśnia, jak zautomatyzować procesy w repozytorium, by zyskać spójność i szybkość pracy zespołu. Opiszemy, czym są git hooks i jak działają w cyklu zmian, aby każdy commit był przewidywalny.

Dowiesz się, które hook może blokować błędy zanim trafią do bazy kodu i jak proste skrypty w katalogu .git/hooks usprawniają walidację, aktualizację dokumentacji i powiadomienia.

Przedstawimy także praktyczne przykłady narzędzi do lintingu i formatowania oraz sposób ich integracji z pipeline’ami CI. Dzięki temu zespół szybciej znajdzie i naprawi regresje.

Kluczowe wnioski

  • Git hooks uruchamiają skrypty przy zdarzeniach w repozytorium.
  • Automatyczne narzędzia poprawiają czytelność i zmniejszają liczbę błędów.
  • Precyzyjne reguły w repozytorium zapewniają spójny sposób pracy zespołu.
  • Wdrożenie lokalnych hooków można rozszerzyć przez wersjonowane konfiguracje.
  • Proste skrypty i przykłady pozwalają szybko włączyć rozwiązania bez dużego nakładu pracy.

Dlaczego automatyzacja jakości kodu przyspiesza rozwój oprogramowania

Narzędzia uruchamiane przy zdarzeniach Gita pozwalają utrzymać spójność i tempo prac nad projektem.

Wdrożenie kontroli przed każdym zapisem zmian skraca czas review. Dzięki temu reviewerzy widzą mniej drobnych problemów, a zespół zyskuje więcej czasu na funkcje. To proste źródło informacji o stanie kodu i standardach w repozytorium.

Praktyczne korzyści to mniejsze ryzyko regresji i szybsze wdrożenia. Narzędzia takie jak Husky, Lint‑Staged czy pre-commit uruchamiają testy i sprawdzają zmienione pliki przed commit. To zmniejsza liczbę poprawek i poprawia stabilność wersji.

Standaryzacja stylu i automatyczne formatowanie utrzymują czytelność. Taki sposób pracy ułatwia onboarding i pozwala zespołowi koncentrować się na wartości biznesowej projektu.

  • Krótki feedback przed commit przyspiesza proces napraw.
  • Powtarzalny proces w kontroli wersji redukuje błędy.
  • Automatyczne sprawdzenia poprawiają tempo rozwoju całego zespołu.
Cel Narzędzie Efekt
Szybsze review Husky + Lint‑Staged Mniej drobnych komentarzy w PR
Wielojęzyczne sprawdzenia pre-commit Spójna walidacja w różnych językach
Stały styl Prettier / formatery Czytelność i łatwiejsze utrzymanie kodu

Git hooks w praktyce: czym są, jak działają i kiedy się uruchamiają

W tej części pokażemy, jak git hooks reagują na zmiany i jakie zadania wykonują w praktyce.

Zdarzenia w kontroli wersji

  • pre-commit uruchamia skrypt przed zapisaniem zmian i może zablokować commit, jeśli testy lub sprawdzenia nie przejdą.
  • commit-msg waliduje treść wiadomości, by wymusić konwencję (np. numer zadania).
  • pre-push pozwala odpalić testy integracyjne przed wysłaniem na zdalne repozytorium.
  • post-commit działa po zatwierdzeniu i służy do powiadomień lub aktualizacji zewnętrznych systemów.

Co można zautomatyzować

  • Uruchamianie testów jednostkowych i integracyjnych.
  • Formatowanie i naprawa stylu kodu przed zatwierdzeniem.
  • Skan bezpieczeństwa oraz generowanie dokumentacji.
  • Wysyłka powiadomień do CI/CD lub narzędzi komunikacyjnych.

„Przykład: pre-commit, który blokuje commit, jeśli testy zwrócą błąd, pomaga upewnić standardy są spełnione.”

Hook Moment uruchomienia Typ zadania
pre-commit przed commit testy, formatowanie, quick-check
commit-msg przed zakończeniem commita walidacja wiadomości, konwencje
pre-push przed push testy integracyjne, skanowanie

Pliki z hooków git znajdują się w katalogu .git/hooks i mogą być pisane w Bash, Pythonie lub Ruby. Nadaj plikom prawa wykonywalne i użyj prostych skryptów, aby zbudować wielowarstwową kontrolę jakości lokalnie, bez łączenia z serwerem.

Gdzie są pliki hooków i jak je aktywować w repozytorium Git

Każde lokalne repo zawiera katalog z gotowymi plikami, które możesz szybko aktywować.

Fizyczna lokalizacja plików to .git/hooks w głównym folderze repozytorium. Znajdziesz tam przykładowe pliki, np. pre-commit.sample i commit-msg.sample.

Aby uruchomić wybrany skrypt, nadaj mu prawa wykonywalne:

  • chmod +x .git/hooks/nazwa_hooka

Przykładowe pliki można przerobić na działające skrypty. Usuń rozszerzenie .sample, dodaj shebang (np. #!/bin/bash) i sprawdź ścieżki do narzędzi.

Lokalne vs wersjonowane rozwiązania

Hooki lokalne działają tylko u ciebie. Menedżery takie jak Husky lub pre-commit ułatwiają dystrybucję konfiguracji poza katalog .git/hooks.

Ogranicz zakres działania skryptów, filtrując zmienione pliki po rozszerzeniach. To przyspiesza pracę i zmniejsza czas wykonywania.

Spisuj aktywne skrypty w README. Jasna dokumentacja zwiększa akceptację zespołu.

Cel Akcja Przykład
Aktywacja Nadanie praw chmod +x .git/hooks/pre-commit
Dystrybucja Wersjonowanie konfiguracji Husky / pre-commit
Diagnostyka Sprawdzanie błędów shebang, prawa, PATH

Prosty skrypt pre-commit (Bash):

#!/bin/bash
git diff --staged --name-only | grep -E '\.(js|py|sh)$' | xargs -r npm run lint && npm test || exit 1

W przypadku problemów sprawdź shebang, uprawnienia i środowisko. Dokumentacja w README ułatwi pracę całemu zespołowi.

Konfiguracja środowiska: instalacja Gita i przygotowanie repozytorium

Dobry start środowiska oszczędza czas i zapobiega problemom podczas pracy z repozytorium.

Ustawienia globalne i identyfikacja autora

Po instalacji ustaw swoje dane globalnie, by każdy commit zawierał czytelną informację o autorze.

Polecenia:

  • git config –global user.name „Imię”
  • git config –global user.email „email@example.com”
  • git config –global core.editor nano
  • git config –global color.ui auto

Instalacja i weryfikacja

Windows: pobierz instalator ze strony Git i zainstaluj.

macOS: brew install git

Linux (Debian/Ubuntu): sudo apt-get install git

Sprawdź wersję: git –version — to pomoże zweryfikować dostępną wersję narzędzia.

Tworzenie repozytorium i organizacja projektu

Nowy projekt zacznij od git init nazwa_repozytorium. Dla istniejącego repo użyj git clone URL.

Zadbaj o strukturę katalogów: src, docs, tests oraz plik .gitignore dla plików tymczasowych i ustawień IDE.

Dokumentacja w README ułatwia onboarding i przyspiesza pracę zespołu.

Poprawne dane autora poprawiają historię zmian i identyfikację wkładu. Regularnie aktualizuj narzędzia i stosuj proste polecenia, by przygotować solidne podstawy pod dalsze automatyczne procesy.

Automatyzacja jakości kodu: linting, formatowanie, pre-commit hooks

Poniżej znajdziesz praktyczny przewodnik, jak napisać pre-commit, który uruchamia linter i testy przed zatwierdzeniem zmian.

Krok po kroku: tworzenie pre-commit do lintera i testów

1. Utwórz plik: .git/hooks/pre-commit i dodaj shebang (#!/bin/bash).

2. Sprawdzanie staged plików: użyj git diff –staged –name-only, filtruj rozszerzenia i uruchamiaj odpowiednie polecenia dla stosu technologicznego.

  • Przykładowe polecenia: ESLint → npm run lint, Ruff → ruff check, testy → npm test lub pytest.
  • Nadaj uprawnienia: chmod +x .git/hooks/pre-commit.

pre-commit

3. Struktura skryptu: pobierz listę staged, uruchom linter tylko na tych plikach, potem testy jednostkowe. Zakończ kodem wyjścia 1, gdy coś nie przejdzie.

Jak upewnić się, że zmiany spełniają standardy przed każdym commitem

Stosuj selektywne sprawdzenia, cache narzędzi i równoległe kroki tam, gdzie to bezpieczne. To skraca czas wykonywania i nie blokuje pracy zespołu.

Alternatywnie użyj narzędzia pre-commit (Python) do wersjonowania reguł w repozytorium. Dzięki temu cały zespół otrzyma te same skrypty i konfiguracje.

Dobry skrypt blokuje commit przy błędach i daje czytelne informacje, co poprawić.

Husky + Lint-Staged: jak dodać hooki Git w projektach JavaScript/TypeScript

Husky i lint-staged to popularne narzędzia, które pozwalają uruchamiać sprawdzenia tylko na zmienionych plikach.

Instalacja jest prosta: npm install husky –save-dev oraz npm install lint-staged –save-dev. Aktywuj Husky komendą npx husky install.

Następnie dodaj hooka: npx husky add .husky/pre-commit „npm run lint” lub skonfiguruj package.json:

  • „husky”: {„hooks”: {„pre-commit”: „lint-staged”}}
  • „lint-staged”: {„*.{js,jsx,ts,tsx}”: [„eslint –fix”, „prettier –write”, „git add”]}

Dlaczego to działa? lint-staged uruchamia narzędzia tylko na zmodyfikowanych plikach, więc nie spowalnia pracy całego zespołu.

Integracja ESLint i Prettier pozwala automatycznie poprawiać styl i kontrolować jakość kodu przed commit. Testuj lokalnie, sprawdzaj komunikaty w konsoli i dodaj oddzielny krok dla testów, gdy projekt rośnie.

„Dzięki prostym skryptom w Husky można wymusić spójność i skrócić czas review.”

Na koniec: zapisz w README polecenia instalacji i sposoby uruchamiania, aby każdy w zespole miał te same informacje i szybki start w repozytorium.

pre-commit (Python): wielojęzyczne hooki bez bólu instalacji

pre-commit to menedżer, który pozwala uruchomić wiele narzędzi z jednego pliku konfiguracyjnego. Dzięki temu zasilisz proces sprawdzania różnych języków w jednym repozytorium.

Instalacja i aktywacja: python -m pip install pre-commit, następnie pre-commit install. Uruchom testowo: pre-commit run –all-files, a aktualizacje wykonasz poleceniem pre-commit autoupdate.

.pre-commit-config.yaml zawiera listę repozytoriów i wersji. Przykłady: pre-commit-hooks (check-added-large-files, trailing-whitespace), mirrors-prettier (prettier), astral-sh/ruff-pre-commit (ruff, ruff-format) oraz mirrors-clang-format (clang-format).

Popularne checki to prettier do formatowania plików tekstowych, ruff dla Pythona, clang-format dla C/C++, shellcheck dla skryptów powłoki i mypy do statycznych typów.

W pliku możesz wykluczyć katalogi (np. third-party/) i skonfigurować reguły tylko dla zmienionych plików. To przyspiesza feedback w pracy zespołu.

„Jedna konfiguracja pozwala uruchomić testy, formatery i skanery bezpieczeństwa przed commitem.”

Cel Repo Przykładowy check
Dokumenty i JSON/YAML mirrors-prettier prettier
Python astral-sh/ruff-pre-commit ruff, ruff-format
C/C++ mirrors-clang-format clang-format

Hook pre-push: testy integracyjne i walidacje przed wypchnięciem zmian

Pre-push pełni rolę ostatniej bramki jakości przed wysłaniem zmian do zdalnego repozytorium.

Strategie: blokowanie push, gdy testy lub linting nie przechodzą

Rola pre-push to uruchomienie cięższych testów integracyjnych i sprawdzeń, które nie mieszczą się w szybkim procesie przed commit.

Ustaw skrypt, który uruchomi testy i linter tylko dla istotnych modułów. W razie niepowodzenia push zostanie zablokowany, a deweloper otrzyma jasny raport.

  • Szybkie walidacje lokalne — krótkie testy i kontrola stylu.
  • Dłuższe testy integracyjne — uruchamiaj warunkowo lub na wybranych ścieżkach.
  • Raporty z testów — pokaż podsumowanie błędów z krótkimi wskazówkami naprawy.

W praktyce można wykorzystać Husky, aby dodać hooki pre-push. Skrypt może selektywnie uruchamiać kroki na zmodyfikowanych częściach repozytorium, co odciąża pracę lokalną.

„Ostatnia bramka przed push pozwala utrzymać wyższy próg jakości bez nadmiernego obciążania codziennej pracy.”

Cel Akcja Przykład
Blokowanie złych zmian Uruchomienie testów integracyjnych npm run test:integration
Selektywna walidacja Sprawdzanie tylko zmodyfikowanych plików lint-staged + husky pre-push
Raportowanie Krótki raport i kod wyjścia Junit XML + konsola
Parowanie z CI Odwzorowanie konfiguracji serwera docker-compose test / CI config

Dobre praktyki: dokumentuj wymagania, cache zależności i aktualizuj hooków regularnie. Dzięki temu zmniejszysz niespodzianki i zapewnisz spójność środowiska.

commit-msg: standaryzacja wiadomości commitów dla czytelnej historii

commit-msg to hook, który wymusza spójny format wiadomości i ułatwia czytanie historii zmian w repozytorium.

Dlaczego to ważne? Poprawne komunikaty pozwalają szybciej odnaleźć zakres prac, powiązać commit z ticketem i automatycznie wygenerować changelog.

Weryfikacja formatu, numerów zadań i konwencji wiadomości

Skrypt commit-msg może sprawdzać prefiks typu (feat|fix|chore), krótki opis i opcjonalny zakres. Można również wymusić obecność numeru zadania w treści.

Przykład prostego skryptu (bash):

#!/bin/bash
MSG_FILE=$1
MSG=$(cat "$MSG_FILE")
PATTERN='^(feat|fix|chore)\([a-zA-Z0-9_-]+\)?: [A-Z].{5,}'
echo "$MSG" | grep -E "$PATTERN" >/dev/null || {
echo "Błąd: wiadomość nie spełnia konwencji. Użyj: feat(scope): Krótki opis [#ISSUE]"
exit 1
}

W komunikacie błędu wskaż konkretny powód odrzucenia i przykład poprawnej wiadomości. Dzięki temu deweloper wie, co poprawić.

Husky ułatwia dodanie commit-msg do projektu — wystarczy dodać plik .husky/commit-msg i przekazać ścieżkę do skryptu. To prosty sposób, by przenieść zasady tworzenia wiadomości na całą pracę zespołu.

Wymóg Cel Przykład
Prefiks typu kategoryzacja zmian feat(auth): Dodaj logowanie
Numer zadania śledzenie ticketów [#1234] lub (JIRA-56)
Minimalna długość jasny opis opis ≥ 5 znaków

W praktyce, stosowanie tej reguły poprawia analizę zmian i audyty. Dołącz w README przykłady poprawnych commitów, aby upewnić spójność i przyspieszyć onboarding nowych członków.

post-commit: automatyczne powiadomienia, dokumentacja i raporty

Post-commit uruchamia działania po zatwierdzeniu zmian i pomaga zespołowi śledzić najnowsze wpisy w repozytorium.

Co można zrealizować? Skrypt po commicie może wysyłać powiadomienia do Slacka lub e‑mail, generować krótkie raporty jakości kodu i aktualizować changelog lub stronę wiki.

W praktyce warto uruchamiać lekkie buildy lub analizy metryk, które nie blokują pracy lokalnej. Cięższe zadania przenieś do CI, by nie spowalniać deweloperów.

post-commit powiadomienia

Prosty przykład: skrypt pobiera dane z ostatniego commitów, tworzy podsumowanie i wysyła je na kanał zespołu. Można też dołączyć linki do raportów i listę zmienionych plików.

Integracje przez webhooki pozwalają powiązać commit z systemem zarządzania zadaniami lub narzędziem do CI. Dzięki temu synchronizujesz pracę i informujesz interesariuszy.

„Spójne powiadomienia poprawiają komunikację i przejrzystość procesu.”

Cel Akcja Efekt
Powiadomienia Webhook → Slack / e‑mail Szybka informacja o zmianach
Dokumentacja Generacja changeloga Aktualne wiki i release notes
Raporty Lekki build / analiza Metryki bez blokowania pracy

Testuj i wersjonuj skrypty post-commit, by unikać fałszywych alarmów. To prosty sposób, by utrzymać porządek i wspierać codzienną pracę zespołu.

Dobór narzędzi do lintingu i formatowania w różnych językach

Omówimy zalety ESLint + Prettier, clang-format/clang-tidy, Ruff/Pylint i Shellcheck oraz ich użycie w praktyce.

JavaScript / TypeScript: ESLint i Prettier współpracują dobrze — pierwszy wykrywa problemy, drugi wymusza styl. W projektach front‑endowych użyj obu i skonfiguruj reguły tak, by nie dublować napraw.

C / C++: clang-format zadba o jednolity styl, a clang-tidy znajdzie błędy logiczne i anty‑wzorce. Połączenie obu daje czytelny i bezpieczny kod.

Python i skrypty

Ruff to szybkie narzędzie do naprawy i wykrywania problemów, a Pylint dostarcza szczegółowych analiz. Warto dodać mypy dla kontroli typów przy większych projektach.

Shellcheck pomaga wychwycić subtelne błędy w skryptach powłoki i zwiększa niezawodność uruchomień.

  • Używaj mirrorów w .pre-commit-config.yaml, by uprościć instalację.
  • Uruchamiaj sprawdzenia tylko na zmienionych plikach i włącz cache, by skrócić czas działania.
  • Dopasuj poziom surowości reguł tak, by nie blokować pracy i stopniowo podnosić standard.

„Spójny zestaw narzędzi ułatwia utrzymanie jakości w czasie i przyspiesza pracę zespołu.”

Język Narzędzie Cel
JS/TS ESLint + Prettier Styl i błędy
C/C++ clang-format / clang-tidy Styl i analiza
Python Ruff / Pylint (+ mypy) Szybkie sprawdzenia i typy

Przykład minimalnej konfiguracji w .pre-commit-config.yaml i plików reguł skraca onboarding w repozytorium. W praktyce wybierz narzędzie, które pasuje do stylu projektu i zapewnia przydatne informacje bez nadmiernego obciążenia.

Przykładowe scenariusze i konfiguracje, które można wykorzystać

Poniżej znajdziesz gotowe scenariusze konfiguracji, które ułatwią pracę w repozytorium wielojęzycznym.

Repo wielojęzyczne: tylko zmienione pliki vs. wszystkie pliki

Szybki tryb: uruchamiaj sprawdzenia wyłącznie na zmienionych plikach, by skrócić czas pracy deweloperów.

Pełny tryb: raz na sprint wykonuj sprawdzenie wszystkich plików (pre-commit run –all-files), aby uporządkować styl i wykryć ukryte problemy.

Wykluczenia, autoupdate i optymalizacja czasu wykonania

W .pre-commit-config.yaml zdefiniuj wykluczenia (np. third-party/, build/) by uniknąć fałszywych alarmów.

Użyj pre-commit autoupdate do aktualizacji reguł bez ręcznej ingerencji. To utrzymuje skryptów w aktualnym stanie.

Łącz zadania i stosuj równoległość tam, gdzie to bezpieczne. Cache narzędzi i selektywne sprawdzenia ograniczają czas uruchamiania.

Scenariusz Akcja Efekt
Regularne porządki Pełny run co sprint Jednolity styl całego repozytorium
Szybki commit Sprawdzanie zmienionych plików Krótki czas pracy
C/C++ checks clang-tidy + compiledb (ogranicz pliki) Precyzyjna analiza bez długiego czekania

Polityka commitów powinna promować inkrementalne poprawki zamiast jednego dużego porządku. Dzięki temu historia zmian pozostaje czytelna.

„Stosuj jasne instrukcje i raportowanie wyników, aby zespół wiedział, kiedy uruchamiać pełne sprawdzenia.”

Na koniec: dokumentuj scenariusze w README, monitoruj czasy wykonania i stosuj cache, by zminimalizować wpływ na codzienną pracę zespołu.

Współdzielenie hooków w pracy zespołu i w repozytorium Git

Dzięki menedżerom hooków można centralnie dystrybuować skrypty i aktualizacje do wszystkich członków zespołu.

Menedżery, wersjonowanie i onboarding

Wersjonowanie konfiguracji w repozytorium gwarantuje, że każdy używa tych samych reguł. To przyspiesza tworzenia środowiska i redukuje różnice lokalne.

Menedżery takie jak Husky i pre-commit ułatwiają dystrybucję. Nie trzeba ręcznie kopiować plików do .git/hooks. Aktualizacje trafiają do wszystkich po prostym pull.

Dokumentacja onboardingowa powinna zawierać kroki instalacji, uruchomienia i listę ważnych hooków, które będą używane: pre-commit, commit-msg i pre-push.

W PR-ach uwzględniaj przegląd zmian konfiguracji. Zadbaj o uprawnienia skryptów i audyt zmian. Stosuj semver dla zestawów reguł i kontrolowane aktualizacje.

„Centralne zarządzanie regułami pozwala utrzymać wysoki poziom pracy bez nadmiernego obciążenia deweloperów.”

Checklistę akceptacyjną dodaj do procesu: testy lokalne, sprawdzenie uprawnień, dokumentacja i przykład użycia. Dzięki temu utrzymasz spójność w całym repozytorium i zespołu.

Integracja z CI: uruchamianie lintingu i testów w pipeline

W pipeline CI warto uruchamiać te same sprawdzenia, które działają lokalnie, by uniknąć niespójności między środowiskami.

Pre-commit w CI: wszystkie pliki vs. różnice względem gałęzi bazowej

W CI można odpalić uruchomienia na wszystkich plikach:

pre-commit run –all-files — pełna weryfikacja całego repozytorium. To dobry wybór po dużych zmianach lub przed releasem.

Alternatywnie uruchom tylko różnice względem gałęzi bazowej:

pre-commit run –from-ref $(git merge-base ${TARGET_BRANCH}) –to-ref HEAD — szybszy tryb dla codziennej pracy.

  • Walidacja konfiguracji CI (np. check-github-actions) zmniejsza błędy w workflow.
  • Skrypt może uruchamiać zestaw hooków warunkowo, zależnie od ścieżek.
  • Integracja wyników z raportowaniem ułatwia recenzentom dostęp do informacji.

„Lokalne hooki plus uruchomienia w CI zamykają pętlę kontroli i utrzymują spójną politykę w repozytorium.”

Tryb Polecenie Cel
Pełny run pre-commit run –all-files Jednolita weryfikacja wersji i plików
Różnice pre-commit run –from-ref … –to-ref HEAD Szybkie sprawdzenie zmian przed merge
Walidacja CI check-github-actions Sprawdzenie konfiguracji pipeline

Wniosek

Kończąc, zwróćmy uwagę na praktyczne korzyści płynące z centralizacji reguł w repozytorium. Git pozwala automatycznie uruchamiać walidacje, testy i poprawki przy zmianach. To minimalizuje błędy i przyspiesza pracę zespołu.

Husky i lint‑staged upraszczają pre-commit w projektach JS/TS, a pre-commit (Python) daje uniwersalny zestaw sprawdzeń dla różnych języków. Takie podejście chroni bazę kodu i zmniejsza liczbę poprawek po review.

Wersjonowanie reguł i uruchamianie tych samych reguł lokalnie i w CI stabilizuje procesy. To inwestycja, która szybko się zwraca w postaci czytelniejszego kodu, spójnej historii wersji i krótszego czasu reakcji na błędy.

FAQ

Co to są hooki Git i kiedy się uruchamiają?

Hooki Git to skrypty wywoływane przez system kontroli wersji przy określonych zdarzeniach, takich jak pre-commit, commit-msg, pre-push czy post-commit. Uruchamiają się lokalnie w katalogu .git/hooks lub za pomocą narzędzi menedżerskich, aby automatycznie wykonać sprawdzenia, testy lub modyfikacje przed lub po operacji Git.

Jakie korzyści przynosi automatyzacja sprawdzania jakości przed commitem?

Dzięki zautomatyzowanym kontrolom można wykryć błędy wcześniej, utrzymać spójny styl i uniknąć regresji. To skraca czas przeglądów kodu, poprawia historię commitów i zmniejsza liczbę poprawek po wdrożeniu. Automatyczne skrypty uruchamiają testy i formatery, co wpływa na szybszy i pewniejszy rozwój projektu.

Gdzie umieścić pliki hooków i jakie mają uprawnienia?

Standardowe miejsce to katalog .git/hooks w repozytorium. Pliki muszą mieć prawa wykonywalne (chmod +x), aby Git mógł je uruchomić. Można też trzymać skrypty w katalogu projektu i użyć krótkich wrapperów w .git/hooks, co ułatwia wersjonowanie i współdzielenie.

Jak skonfigurować środowisko Git przed dodaniem hooków?

Zainstaluj Git i ustaw globalne dane autora (git config –global user.name i user.email). Warto też skonfigurować .gitattributes i .gitignore. Po przygotowaniu repozytorium można dodać skrypty do .git/hooks lub zainstalować narzędzia, które zarządzają hookami w katalogu projektu.

Jak stworzyć prosty pre-commit, który uruchamia testy i formatowanie?

W .git/hooks utwórz plik pre-commit z poleceniami uruchamiającymi narzędzia testowe i formatery, nadaj mu prawa wykonywalne. Alternatywnie użyj Husky (dla JS/TS) lub pre-commit (dla Pythona), które pozwalają zadeklarować reguły w plikach konfiguracyjnych i uruchamiać checki tylko na zmienionych plikach.

Czym różnią się narzędzia Husky i pre-commit?

Husky integruje się z ekosystemem Node.js i ułatwia dodanie hooków w projektach JavaScript/TypeScript. pre-commit to wielojęzyczny menedżer hooków (popularny w Pythonie), obsługujący repozytoria z różnymi checkami. Oba upraszczają instalację i aktualizację reguł bez ręcznej edycji .git/hooks.

Jak skonfigurować lintowanie i formatowanie w projektach JS/TS?

Zainstaluj ESLint i Prettier, skonfiguruj pliki .eslintrc i .prettierrc, a następnie użyj lint-staged razem z Husky, aby uruchamiać sprawdzenia tylko na zmienionych plikach podczas pre-commit. To przyspiesza wykonywanie skryptów i wymusza jednolity styl kodu.

Jak używać pre-commit dla projektów wielojęzycznych?

Stwórz .pre-commit-config.yaml z listą hooków i repozytoriów, np. prettier, ruff, clang-format czy shellcheck. Narzędzie pobierze i zainstaluje odpowiednie checki w izolowanym środowisku, co upraszcza wdrożenie w repo z kodem w wielu językach.

Co robi hook pre-push i kiedy warto go użyć?

pre-push uruchamia akcje przed wysłaniem zmian do zdalnego repozytorium. Służy do uruchamiania testów integracyjnych, walidacji migracji bazy danych lub blokowania pushy, jeśli krytyczne checki nie przejdą. To ostatnia linia obrony przed wypchnięciem wadliwych zmian.

Jak standaryzować wiadomości commitów za pomocą commit-msg?

W hooku commit-msg sprawdź format wiadomości, np. konwencję typu Conventional Commits, numer zadania w systemie issue czy długość nagłówka. Skrypt może odrzucić commit, jeśli wiadomość nie spełnia reguł, co ułatwia czytelność historii i automatyzację changelogów.

Do czego służy post-commit i jak go wykorzystać?

post-commit uruchamia zadania po zakończonym commicie, np. generowanie dokumentacji, wysyłkę powiadomień do narzędzi komunikacyjnych lub aktualizację lokalnych raportów. Jest przydatny do działań informacyjnych, które nie blokują procesu commitu.

Jak dobrać narzędzia do lintowania dla różnych języków?

Wybierz narzędzie dopasowane do języka: ESLint/Prettier dla JS/TS, clang-format lub clang-tidy dla C/C++, Ruff lub Pylint dla Pythona, ShellCheck dla skryptów powłoki. Ważne jest, aby narzędzia miały możliwość integracji z hookami i CI.

Jak optymalizować działanie checków w dużym repozytorium?

Uruchamiaj narzędzia tylko na zmienionych plikach zamiast na całym repozytorium. Stosuj wykluczenia dla generowanych plików oraz mechanizmy autoupdate hooków. Dzięki temu skrócisz czas wykonywania i zmniejszysz obciążenie dla deweloperów.

Jak współdzielić hooki w zespole i wersjonować ich konfigurację?

Przechowuj konfiguracje i skrypty w repozytorium projektu zamiast bezpośrednio w .git/hooks. Użyj menedżera hooków (np. Husky, pre-commit) i umieść instrukcję instalacji w dokumentacji onboardingowej. Wersjonuj pliki konfiguracyjne, aby zapewnić spójność między członkami zespołu.

Czy warto uruchamiać te same checki w CI, co lokalnie?

Tak — CI gwarantuje spójną weryfikację zmian na serwerze. W pipeline można uruchamiać linting i testy na wszystkich plikach lub tylko na różnicach względem gałęzi bazowej. CI daje pewność, że żadne lokalne pominięcie nie trafi do głównej gałęzi.

Jak monitorować i aktualizować zainstalowane checki i hooki?

Używaj mechanizmów autoupdate narzędzi (np. pre-commit autoupdate) oraz zarządzaj wersjami w plikach konfiguracyjnych. Regularne przeglądy konfiguracji i testy w CI pomagają wykryć niekompatybilności przed wdrożeniem zmian do zespołu.
Ocena artykułu
Oddaj głos, bądź pierwszy!