Generator git hooków
Zbuduj wykonywalne hooki do lintowania, kontroli commitów i testów przed wysłaniem zmian.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Wzorzec wiadomości commita
Uruchom skopiowany instalator w katalogu repozytorium przez sh install-hooks.sh. Skrypt zapisze hooki w .git/hooks/ albo .husky/ i wykona chmod +x. Husky musi być wcześniej zainstalowany w projekcie.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator git hooków — automatyczna kontrola przed commitem i push
Generator git hooków tworzy przenośny instalator POSIX shell, który zapisuje wybrane skrypty pre-commit, commit-msg i pre-push we właściwym katalogu oraz nadaje im prawo wykonywania. Wybierasz natywne hooki Git albo katalog Husky, podajesz polecenia linta i testów, a wynik uruchamiasz raz w katalogu repozytorium.
Co dokładnie powstaje
Wynik nie jest luźnym fragmentem kilku plików, lecz kompletnym skryptem instalacyjnym zaczynającym się od #!/usr/bin/env sh i set -eu. Dla zwykłego trybu katalog hooków jest pobierany poleceniem git rev-parse --git-path hooks, więc działa także wtedy, gdy Git używa niestandardowej ścieżki. Dla Husky celem jest .husky/. Każdy zapisany hook dostaje własny shebang, tryb bezpiecznego przerywania oraz chmod +x.
| Hook | Moment uruchomienia | Zadanie generatora |
|---|---|---|
pre-commit | Przed utworzeniem commita | Uruchamia wskazany lint, np. ESLint, Ruff lub PHP_CodeSniffer |
commit-msg | Po zapisaniu wiadomości | Sprawdza pierwszy argument hooka wyrażeniem zgodnym z grep -E |
pre-push | Przed wysłaniem referencji | Uruchamia testy i blokuje push, gdy polecenie zwróci błąd |
| Instalator | Jednorazowo w repozytorium | Tworzy katalog, zapisuje pliki i ustawia bit wykonywalny |
Jak użyć wygenerowanego instalatora
- Wybierz preset Node, PHP, Python lub Husky. Preset ustawia sensowne polecenia startowe, które możesz dowolnie zmienić.
- Zaznacz tylko te etapy, które mają obowiązywać. Puste polecenie albo wartość wielowierszowa jest odrzucana, aby przypadkowy enter nie zmienił struktury skryptu.
- Skopiuj wynik do pliku, na przykład
install-hooks.sh, w katalogu głównym klonu. - Uruchom
sh install-hooks.sh. Instalator zapisze hooki i wykonachmod +x; nie trzeba ręcznie poprawiać uprawnień każdego pliku. - Wykonaj próbny commit i push. Sam instalator można potem usunąć albo przechowywać w repozytorium jako dokumentację polityki.
Reguły wiadomości warto zestawić z zasadami pracy zapisanymi obok generatora .dockerignore. Kontrole uruchamiane lokalnie powinny mieć odpowiednik w generatorze GitHub Actions albo generatorze GitLab CI, ponieważ lokalny hook można pominąć.
Shell, cudzysłowy i bezpieczny zapis
Instalator korzysta wyłącznie ze składni POSIX sh, a każdą linię hooka zapisuje przez printf z bezpiecznym cytowaniem. Dzięki temu apostrof w wyrażeniu regularnym nie kończy przedwcześnie literału instalatora. Polecenia linta i testów są zachowywane jako pojedyncze linie: zostaną wykonane dopiero przez właściwy hook, a nie w chwili generowania pliku w przeglądarce.
Hook commit-msg sprawdza, czy Git przekazał nazwę pliku wiadomości, a następnie używa grep -Eq --. Separator -- chroni wzorzec zaczynający się od myślnika przed potraktowaniem jak opcja. Domyślna reguła akceptuje popularne typy Conventional Commits, opcjonalny zakres w nawiasie, dwukropek, spację i opis.
Natywne hooki a Husky
Natywne pliki w .git/hooks dotyczą konkretnego klonu i nie są normalnie wersjonowane. Są lekkie i nie wymagają Node, ale każda osoba musi uruchomić instalator. Husky trzyma skrypty w .husky, więc można je commitować i instalować podczas instalacji zależności. Generator nie dodaje przestarzałego ładowania pliku _/husky.sh; generowane hooki są samodzielnymi skryptami.
Husky nadal musi być wcześniej zainstalowany i aktywowany w projekcie. Generator nie edytuje package.json i nie uruchamia menedżera pakietów. Pliki pomocnicze repozytorium uporządkujesz z generatorem .gitignore, aby lokalne wyniki linta i testów nie trafiły przypadkiem do historii.
Ograniczenia i polityka zespołu
Hook jest barierą szybkiej informacji, a nie zabezpieczeniem serwera. Git pozwala użyć --no-verify, dlatego wymagane testy muszą działać ponownie w CI. Polecenia podajesz samodzielnie i powinny pochodzić z zaufanej konfiguracji projektu. Generator nie uruchamia ich, nie sprawdza dostępności binarek i nie instaluje zależności.
Warto utrzymywać hooki szybkie: lint zmienionych plików zwykle nadaje się do pre-commit, pełny zestaw testów do pre-push, a kosztowne skany do CI. Gdy test trwa kilka minut, ludzie częściej go omijają. Komunikat błędu powinien mówić, jak uruchomić poprawkę lokalnie i co dokładnie zablokowało operację.
Najczęściej zadawane pytania
Dlaczego hook nie uruchamia się po skopiowaniu pliku?
System uniksowy wymaga bitu wykonywalnego. Wygenerowany instalator sam wykonuje chmod +x. Jeśli plik został przeniesiony inną metodą, sprawdź ls -l i ponownie ustaw uprawnienie.
Czy hooki działają w Windows?
Tak w Git Bash, WSL lub innym środowisku z POSIX sh. Skrypty muszą mieć końce linii LF. W natywnym PowerShell potrzebny byłby osobny wrapper, którego ten generator nie tworzy.
Czy mogę użyć polecenia z argumentami?
Tak. Pole takie jak npm test -- --runInBand pozostaje jedną linią i zostanie wykonane przez hook. Wielowierszowe fragmenty są celowo odrzucane; rozbudowaną logikę lepiej umieścić w wersjonowanym skrypcie projektu.
Jak zmienić format wiadomości commita?
Podaj wyrażenie regularne rozszerzone obsługiwane przez grep -E. Generator bezpiecznie cytuje apostrofy, ale nie zmienia znaczenia operatorów. Najpierw przetestuj przykładowe wiadomości w lokalnym terminalu.
Czy hook zastępuje pipeline CI?
Nie. Hook daje szybki wynik przed commitem lub push, lecz można go pominąć i działa tylko w skonfigurowanym klonie. Pipeline na serwerze jest ostatecznym, powtarzalnym warunkiem scalenia zmian.