Git hook nedir? Husky ve lint-staged ile commit öncesi kontrolleri nasıl kurarsınız?
Cevap
Git hook'ları, belirli Git olaylarından (commit, push, merge) önce veya sonra otomatik çalışan script'lerdir. .git/hooks/ klasöründe bulunurlar. En yaygın kullanım: commit öncesi lint ve format, commit mesajı kontrolü, push öncesi test.
| Hook | Ne zaman çalışır | Tipik kullanım |
|---|---|---|
pre-commit | Commit oluşturulmadan önce | Lint, format, secret taraması |
commit-msg | Mesaj yazıldıktan sonra | Conventional Commits kontrolü |
pre-push | Push öncesi | Unit testler, type check |
post-merge | Merge/pull sonrası | Bağımlılıkları yeniden yükleme |
.git/hooks repoya commit edilmediği için ekipte paylaşmak zordur. Husky bu hook'ları repodaki bir klasörde tutup herkesin makinesinde otomatik kurar; lint-staged ise sadece commit'e eklenen (staged) dosyalarda çalışarak kontrolü hızlı tutar.
npm install -D husky lint-staged
npx husky init # .husky/pre-commit oluşturur ve "prepare" script'ini ekler
echo "npx lint-staged" > .husky/pre-commit{
"lint-staged": {
"*.{ts,tsx,js}": ["eslint --fix", "prettier --write"],
"*.{css,md,json}": "prettier --write"
}
}Dikkat
- Hook'lar
git commit --no-verifyile atlanabilir. Bu yüzden asıl kontrol CI'da tekrar yapılmalıdır; hook'lar sadece hızlı geri bildirim içindir. - Pre-commit'te tüm test suite'ini çalıştırmak commit'i yavaşlatır ve geliştiricileri
--no-verifykullanmaya iter; ağır kontroller pre-push veya CI'a bırakılmalı. - Python ekosisteminde aynı iş için
pre-commitframework'ü kullanılır.
İlgili Git soruları
- git merge ile git rebase arasındaki fark nedir?
- git reset ile git revert arasındaki fark nedir?
- İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?
- Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?
- git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?
- Merge conflict nedir ve nasıl çözülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.