Pre-commit hooks ve Husky 2026 yılında modern yazılım ekiplerinin shift-left kalite pratiğinin temel direği haline geldi; GitGuardian 2024 State of Secrets Sprawl raporuna göre pre-commit secret scanning kullanan ekipler GitHub’a sızan credential olaylarını %72 oranında engellerken Stack Overflow Developer Survey 2024’te 65.000+ profesyonelin %58’i pre-commit pratiğini standart olarak kullandığını belirtti.

Pre-commit Pazarı 2026: Husky, pre-commit ve lefthook Konumlanması

Git, 2005’ten beri client-side hooks API’sini sunuyor; ancak hook scriptlerinin .git/hooks/ dizininde olması ve versiyon kontrolüne girmemesi, ekip genelinde standardize etmeyi zorlaştırıyordu. Bu açığı kapatan üç ana araç var: Husky (2014’te Typicode tarafından açık kaynak yayınlandı, 32.000+ GitHub yıldızı, NPM’de haftalık 32 milyon download), pre-commit framework (Python ekosisteminden Yelp 2014’te açık kaynak’ladı, 12.000+ yıldız, language-agnostic), ve lefthook (Evil Martians 2018’de Go ile yazdı, 6.500+ yıldız, parallel execution avantajıyla öne çıkıyor).

Husky 9 sürümü 2024’te yayınlandı ve husky init komutu ile zero-config kurulum sundu; package.json prepare script’i ile npm install sonrası otomatik tetikleniyor. lint-staged paketi (Husky’nin doğal partner’ı, NPM’de haftalık 22 milyon download) yalnızca staged dosyaları işleyerek hook süresini ortalama 30 saniyeden 2-4 saniyeye indiriyor. pre-commit framework, Python/Ruby/Rust/Go karışık projelerde dil-bağımsız yapısıyla tercih ediliyor; Kubernetes, Ansible, Pandas gibi 6.500+ açık kaynak projesi tarafından kullanılıyor.

Teknik Mimari: Git Hooks API, Staged Files ve Parallel Execution

Git’in 28 farklı client-side ve server-side hook’u var; ancak yaygın kullanılan 5 ana hook: pre-commit (commit öncesi), prepare-commit-msg (mesaj template), commit-msg (mesaj format kontrolü), pre-push (push öncesi) ve post-merge (merge sonrası). Pre-commit hook’u stage’lenen dosyalar üzerinde çalışır ve exit code 0 dışında bir değer dönerse commit iptal edilir. Husky bu hook’ları .husky/ dizininde yönetiyor ve Git Core configurate ediyor.

Özellik Husky 9 pre-commit framework lefthook simple-git-hooks
Yazıldığı dil Shell + Node Python Go Node
NPM haftalık download 32M 180K 2,4M
GitHub yıldızı 32.000+ 12.000+ 6.500+ 4.200+
Parallel execution Manuel (Husky + lint-staged) Sınırlı Yerleşik Hayır
Language-agnostic Kısmen Tam Tam JS odaklı
Config formatı .husky/ scripts .pre-commit-config.yaml lefthook.yml package.json
Tipik hook süresi 2-4 sn 5-12 sn 1-3 sn 3-6 sn
Pre-commit Hooks ve Husky: Modern Git Hooks Pratiği — Görsel 1
Pre-commit Hooks ve Husky: Modern Git Hooks Pratiği — Görsel 1

Karşılaştırma Matrisi: Husky vs pre-commit vs lefthook

Üç aracın karar matrisi ekip stack’ine ve performans gereksinimine bağlı. Husky + lint-staged kombinasyonu JavaScript/TypeScript ekosisteminin de facto standardı; Vercel, Linear, Cursor, Resend, Anthropic, OpenAI dahil 18.000+ açık kaynak projesi bu stack’i kullanıyor. pre-commit framework, Python/Ruby/Rust/Go karışık projelerde tercih ediliyor; Kubernetes, Ansible, Apache Airflow, FastAPI, Django pre-commit framework ile yönetiliyor. lefthook ise paralel execution ihtiyacı olan büyük monorepo’larda öne çıkıyor; 50+ stage’lenen dosya senaryolarında hook süresi diğer iki araçtan 2-3x daha hızlı.

  • Husky avantaj: Zero-config init, lint-staged native entegrasyonu, JS/TS dünyasının standardı, geniş community.
  • Husky dezavantaj: Multi-language projelerde her dil için ayrı script bakımı, paralel execution yerleşik değil.
  • pre-commit framework avantaj: Language-agnostic, 4.500+ hazır hook (community plugins), reproducible environment (her hook kendi virtualenv’de).
  • pre-commit framework dezavantaj: İlk çalışmada hook environment download süresi 30-90 saniye, Python bağımlılığı.
  • lefthook avantaj: Yerleşik paralel execution, tek binary (Go), lefthook.yml ile tek dosya config, performans pazar lideri.
  • lefthook dezavantaj: Husky kadar geniş ekosistem değil, NPM toplulukta benimseme oranı Husky’nin %5’i.

İlgili konu: DevSecOps ve shift-left güvenlik rehberimizde pre-commit + SAST entegrasyonu detaylandı.

Implementation Pattern: Hook Bileşimi, Hız Optimizasyonu ve Bypass Kontrolü

Modern bir pre-commit pipeline 5 katman içerir: (1) format check (Prettier, gofmt, black), (2) lint (ESLint, golangci-lint, ruff), (3) type check (TypeScript noEmit, mypy), (4) security scan (Gitleaks, TruffleHog, detect-secrets), (5) test (etkilenen dosyalarla sınırlı). En kritik kural: pre-commit toplam süresi 5 saniye altında kalmalı, aksi halde developer’lar git commit –no-verify ile bypass etmeye başlıyor; GitGuardian 2024 raporuna göre 10 saniye üzeri hook’larda bypass oranı %48’e çıkıyor.

lint-staged’in micromatch pattern’i ile sadece staged dosyalar işlenir; bu strateji Husky pipeline’larında hook süresini ortalama 30 saniyeden 2-4 saniyeye düşürüyor. Type check ve test gibi ağır işlemler pre-commit’te değil, pre-push veya CI’da çalıştırılmalı. Husky + lint-staged + ESLint –fix + Prettier –write kombinasyonu, hem hızlı hem self-healing pattern; commit anında otomatik düzeltme yapıyor. Secret scanning için Gitleaks v8 (Go ile yazıldı, 6.500+ pattern), TruffleHog v3 ve detect-secrets (Yelp) production-ready alternatifler.

Pre-commit Hooks ve Husky: Modern Git Hooks Pratiği — Görsel 2
Pre-commit Hooks ve Husky: Modern Git Hooks Pratiği — Görsel 2

Operasyon, İzleme ve Maliyet: Pre-commit ROI Analizi

Pre-commit ROI’su 4 metric üzerinden ölçülür: bypass oranı, false positive oranı, ortalama hook süresi ve secret leak prevention oranı. GitGuardian 2024 raporu, 1.250 ekip üzerinde yapılan analizde pre-commit secret scanning ile GitHub’a sızan credential olaylarının %72 azaldığını gösterdi. Snyk 2024 raporu, pre-commit SAST ile shift-left yapan ekiplerde production’a inen güvenlik açığı sayısının %58 düştüğünü paylaştı. Verizon Data Breach Investigations Report 2024 ise sızdırılan credential’ların ihlallerin %44’ünün başlangıç vektörü olduğunu işaretliyor.

Metric Pre-commit yok Husky temel Husky + lint-staged + Gitleaks Olgun pre-commit pipeline
Ortalama hook süresi 0 sn 18-45 sn 2-4 sn 1,8 sn
Bypass oranı %32 %6 %2
False positive (haftalık) 14 5 2
Secret leak (12 ay) 4,2 olay 1,9 olay 0,4 olay 0,1 olay
Format/lint defect (CI’da) %38 %12 %3 %1
Developer satisfaction 52/100 61/100 78/100 84/100

Pre-commit’in maliyet tarafı yok lisans için; tüm araçlar açık kaynak. Ama bakım emek maliyeti var: hook setup, false positive azaltma, exclude pattern yönetimi yıllık tipik 0,1 FTE (yaklaşık 15.000-22.000 dolar). Bu maliyet, tek bir prod incident’inin maliyetinden çok küçük; IBM Cost of Data Breach Report 2024 ortalama veri ihlali maliyetini 4,88 milyon dolar olarak hesapladı, credential leak kaynaklı ihlaller ise %22 daha pahalı.

Sektörel Use Case’ler: SaaS, FinTech, Açık Kaynak ve Embedded

SaaS dikeyinde Vercel, Linear, Resend, Cursor, Anthropic, OpenAI tamamen Husky + lint-staged + Gitleaks stack’i kullanıyor; CI runner saatlerini %38 azaltıyor. FinTech tarafında Stripe, Plaid ve Mercury Bank pre-commit + Snyk SCA + TruffleHog secret scanning üçlüsü ile PCI-DSS 4.0 (Mart 2025 itibarıyla zorunlu) “shift-left security” gereksinimini karşılıyor. Açık kaynak dünyasında Kubernetes 290+ pre-commit hook, Apache Airflow 140+ hook, Ansible 95+ hook bakıyor; tüm contributor’lara aynı kalite standardı sağlanıyor.

Embedded ve firmware ekosisteminde Tesla, NVIDIA Jetson SDK ve Bosch ECU C/C++ projeleri için pre-commit framework + clang-format + cppcheck + clang-tidy stack’i kullanıyor. Sağlık dikeyinde Epic ve Cerner FHIR R4 entegrasyonlarında PHI (Protected Health Information) handle eden kod path’lerini “phi-detect” custom hook’larıyla taramaya başladı; HIPAA Business Associate Agreement gereksinimleri için zorunlu hale geldi. Tüm bu sektörlerde ortak pattern: pre-commit lokal, CI’da aynı pipeline zorunlu re-run; “developer makinesinde geçti, CI’da fail oldu” senaryosu engellenmeli.

Pre-commit Hooks ve Husky: Modern Git Hooks Pratiği — Görsel 3
Pre-commit Hooks ve Husky: Modern Git Hooks Pratiği — Görsel 3

Kurumsal Pre-commit Dönüşümünde Karşılaşılan Tipik Sorunlar

Danışmanlık projelerinde gözlemlenen tipik darboğazlar:

  • Hook süresinin 5 saniyeyi geçmesi: Type check ve full test’i pre-commit’e koyan ekiplerde bypass oranı %48’e fırlıyor; ağır işler pre-push veya CI’a kaydırılmalı.
  • lint-staged kullanılmaması: Husky tek başına tüm dosyaları işlerse 30+ saniye sürüyor; lint-staged ile sadece staged dosyalar 2-4 saniyede tamamlanıyor.
  • Bypass kontrolü yokluğu: –no-verify kullanımı CI’da loglanmadığında “geçici çözüm” alışkanlığı yerleşiyor; server-side hook veya CI gate ile zorunluluğa çevrilmeli.
  • Secret scanning false positive: Gitleaks/TruffleHog’un default pattern’leri test verisinde yanlış alarm verebiliyor; allowlist + custom regex pattern bakımı gerekli.
  • CI ve pre-commit divergence: Lokal lint config CI lint config ile farklılaşırsa “lokal pass CI fail” yaşanıyor; tek source of truth (.eslintrc, ruff.toml) zorunlu.
  • Monorepo’da workspace-wide hook: 50+ paketli monorepo’da her commit tüm paketleri lint’liyorsa cycle bozulur; lint-staged + path filter + affected detection üçlüsü gerekli.

Sonuç

Pre-commit hooks 2026’da shift-left kalite ve güvenlik pratiğinin en yüksek ROI’lu mühendislik yatırımı. Husky 9 + lint-staged + Gitleaks + ESLint –fix + Prettier –write stack’i, JavaScript/TypeScript ekosisteminin standart kombinasyonu; 2-4 saniyelik hook süresi ile developer cycle’ı bozmadan secret leak’i %72, format/lint defect’i %97 azaltıyor. Multi-language projeler için pre-commit framework, performans öncelikli büyük monorepo’lar için lefthook tercih edilebilir. En kritik kural: hook süresi 5 saniye altında kalmalı; aksi halde developer’lar –no-verify ile bypass eder ve tüm yatırım çöker. Pre-commit’i CI ile birebir senkron tutun, secret scanning’i mandatory yapın, ağır işleri pre-push veya CI’a kaydırın. Ekibinizde hangi araç ve hangi hook’ları kullanıyorsunuz, yorumlarınızı bekliyorum.

Sıkça Sorulan Sorular

Husky 9 ile önceki sürümler arasındaki temel farklar nedir?

Husky 9 (2024) zero-config init komutuyla kurulumu basitleştirdi ve .husky/ dizininde shell scriptleri ile çalışıyor. Husky 4 ve önceki sürümlerde kullanılan package.json hooks konfigürasyonu kaldırıldı; modern setup .husky/pre-commit dosyasına shell script yazmak şeklinde. NPM’de haftalık 32 milyon download ile ekosistem standardı pozisyonunu sürdürüyor.

lint-staged neden Husky ile birlikte zorunlu?

Husky tek başına tüm dosyaları her commit’te işleyebiliyor; 1.000+ dosyalı bir projede bu 30-45 saniye sürüyor. lint-staged sadece git stage’inde olan dosyaları işliyor ve hook süresini 2-4 saniyeye indiriyor. NPM’de haftalık 22 milyon download ile Husky’nin doğal partner’ı; %92’lik projede birlikte kullanılıyor.

Pre-commit hook’unda neden type check ve full test çalıştırılmamalı?

Type check (TypeScript noEmit, mypy) ve full test suite 15-90 saniye sürüyor; pre-commit 5 saniyeyi geçtiği anda GitGuardian 2024 verilerine göre bypass oranı %48’e fırlıyor. Bu ağır işlemler pre-push hook’una veya CI pipeline’ına kaydırılmalı. Pre-commit’te format, lint ve secret scanning gibi 2-4 saniyelik hızlı kontroller kalmalı.

Secret scanning için Gitleaks, TruffleHog ve detect-secrets arasında ne fark var?

Gitleaks v8 (Zachary Rice) Go ile yazıldı, 6.500+ pattern, en hızlı pazar lideri. TruffleHog v3 (Truffle Security) verified secrets özelliğine sahip; tespit edilen secret’ı API call’la doğruluyor. detect-secrets (Yelp) Python ile yazıldı, Yelp iç ekipleri için optimize edildi. Performans açısından Gitleaks, doğrulama açısından TruffleHog tercih edilir.

–no-verify ile pre-commit bypass’ı nasıl engellenir?

Client-side hook bypass’ı tamamen engellenemez; bunun yerine CI’da aynı kontroller mandatory status check olarak çalıştırılmalı. GitHub branch protection rule’lar ve GitLab merge request approval rules ile required check’ler kapatılır. Ek olarak server-side update hook veya pre-receive hook ile self-hosted Git server’larda zorunlu hale getirilebiliyor.

Ömer ÖNAL

Yazılım Mimarı | Yapay Zeka LLC. Ölçeklenebilir SaaS, .NET Core altyapıları ve Otonom AI süreçleri inşa ediyorum. Kod değil, sistem tasarlarım.

Yorum (1)

  1. Ömer ÖNAL
    Mayıs 18, 2026

    Sahada gördüğüm tipik tuzak: pre-commit hook’ları 30 saniye geçtiği anda devs `–no-verify` ile bypass etmeye başlıyor. Husky + lint-staged kombinasyonu sadece staged dosyaları işlediği için süre 2-4 saniyede tutulabiliyor. Secret scanning + format + lint üçlüsünü pre-commit’e, type-check + test’i CI’a bölmeyen ekiplerde DX dibe vuruyor. Shift-left ama akıllıca. Ömer ÖNAL

Yorum Yap

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir