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.

HookNe zaman çalışırTipik kullanım
pre-commitCommit oluşturulmadan önceLint, format, secret taraması
commit-msgMesaj yazıldıktan sonraConventional Commits kontrolü
pre-pushPush öncesiUnit testler, type check
post-mergeMerge/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-verify ile 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-verify kullanmaya iter; ağır kontroller pre-push veya CI'a bırakılmalı.
  • Python ekosisteminde aynı iş için pre-commit framework'ü kullanılır.
  1. git merge ile git rebase arasındaki fark nedir?OrtaGitFull Stack
  2. git reset ile git revert arasındaki fark nedir?OrtaGitFull Stack
  3. İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?KolayGitFull Stack
  4. Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?ZorGitFull Stack
  5. git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?OrtaGitFull Stack
  6. Merge conflict nedir ve nasıl çözülür?KolayGitFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle