Kaotik commit geçmişine son: Conventional Commits ile tanışın
🌟 Giriş: Neden Bu Kadar Önemsiyoruz?
Bir yazılım projesinin git geçmişine baktığınızda aslında bir hikaye okursunuz. Bu hikaye, ekibin aylar veya yıllar boyunca verdiği kararların, çözdüğü problemlerin ve yarattığı çözümlerin kronolojik bir kaydıdır. Tıpkı iyi yazılmış bir kitap gibi, iyi düzenlenmiş bir git geçmişi de okuyucusuna (yani gelecekteki yazılımcılara) net bir resim sunar.
Peki hiç düşündünüz mü? Neden bazı projelerde geçmişe bakmak bu kadar kolay ve keyifliyken, diğerlerinde adeta bir bulmaca çözüyormuş gibi hissediyoruz?
💡 Bir Senaryo Düşünelim
Pazartesi sabahı, saat 09:00. Acil bir telefon alıyorsunuz. Prodüksiyondaki e-ticaret sisteminizde müşteriler ödeme yapamıyor. Ekip telaşla bir araya geliyor ve son deploymenttan sonra yapılan değişiklikleri incelemeye başlıyorsunuz.
Senaryo 1: Kötü Commit Geçmişi
fix bug
updated code
final fix
really final fix
ops forgot something
Senaryo 2: İyi Düzenlenmiş Commit Geçmişi
feat(payment): Stripe entegrasyonu eklendi
test(payment): Stripe webhook testleri
fix(security): API key rotasyonu
perf(checkout): Ödeme form validasyonu optimize edildi
docs(api): Stripe entegrasyon dökümanı
Hangi senaryoda sorunu daha hızlı çözerdiniz?
🎯 Conventional Commits: Standardın Gücü
Conventional Commits, git commit mesajlarınızı standardize etmenin ötesinde, projenizin otomatik versiyonlanması, changelog oluşturulması ve daha birçok otomasyon için temel oluşturur.
📝 Temel Yapı
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
🎨 Commit Mesajı Sanatı
Başlık Yazımı
- Kısa ve öz (50 karakter ideal)
- Emir kipi kullanır
- Büyük harfle başlar
- Nokta ile bitmez
✅ Doğru Örnekler:
feat(auth): Implement Google OAuth2 login
fix(cart): Resolve total calculation error
docs(api): Update authentication guide
❌ Yanlış Örnekler:
fixed a bug
updated some code...
WIP
Detaylı Açıklama Yazımı
Commit mesajının gövdesi şu soruları cevaplamalıdır:
- Bu değişiklik neden yapıldı?
- Nasıl bir çözüm uygulandı?
- Ne gibi yan etkileri var?
🔍 Commit Tipleri: Derinlemesine Bir Bakış
1. Feature Commits (feat)
Yeni özellik eklediğinizde kullanacağınız bu tip, projenizin büyüme hikayesini anlatır.
feat(user-profile): fotoğraf düzenleme özelliği eklendi
Kullanıcılar artık:
- Fotoğraf yükleyebilir
- Kırpma/düzenleme yapabilir
- Filtreler uygulayabilir
Teknik detaylar:
- Sharp.js ile image processing
- AWS S3 entegrasyonu
- Lazy loading implementasyonu
Performance metrics:
- Upload süresi: ~1.2s
- Processing süresi: ~800ms
- Ortalama dosya boyutu: 60% küçülme
Closes: #234, #235
Related: #236
2. Bug Fix Commits (fix)
Her bug fix, kullanıcılarınıza verdiğiniz bir söz gibidir. Bu commit’ler projenizin olgunlaşma sürecini gösterir.
fix(auth)!: JWT token yenileme sorunu giderildi [CRITICAL]
Problem:
Token yenileme sırasında oluşan race condition,
kullanıcıların oturumlarının beklenmedik şekilde
kapanmasına neden oluyordu.
Root Cause Analysis:
- Concurrent token refresh istekleri
- Redis'te lock mekanizması eksikliği
- Hatalı token invalidation süreci
Çözüm:
1. Redis-based distributed locking implementasyonu
2. Token blacklist mekanizması
3. Refresh token rotasyonu
4. Rate limiting implementasyonu
Güvenlik İyileştirmeleri:
- Token fingerprinting eklendi
- JWT payload encryption
- Audit logging geliştirildi
Performans Etkisi:
- Token yenileme: 300ms -> 120ms
- CPU kullanımı: %25 düşüş
- Redis operations: %40 azalma
Breaking Changes:
- Token format değişti
- Client library güncellenmeli (v2.0.0)
Fixes: #445
Security-Review: @security-team
QA-Approved: @qa-lead
3. Refactoring Commits (refactor)
Kod kalitesini artırmak için yapılan değişiklikler, teknik borcun ödendiği anlardır.
refactor(database): ORM katmanı modernizasyonu
Motivasyon:
Mevcut Raw SQL queries maintenance zorluğu
ve test edilebilirlik problemleri.
Değişiklikler:
1. TypeORM implementasyonu
2. Repository pattern
3. Query builder implementasyonu
4. Migration sistemi
Teknik Detaylar:
- Entity relationship mapping
- Lazy loading stratejisi
- Connection pooling optimizasyonu
- Query caching mekanizması
Performans Karşılaştırması:
Önce Sonra
Sorgu süresi: 450ms 180ms
Memory usage: 280MB 140MB
CPU kullanımı: 45% 25%
Test Coverage:
- Unit tests: %95
- Integration tests: %85
- E2E tests: %75
Migration Plan:
1. Shadow mode deployment
2. Gradual feature toggle
3. Legacy system sunset: 2 hafta
Breaking Changes:
- Database interface değişti
- Config yapısı güncellendi
- Minimum Node.js version: 14
Related: #501, #502, #503
📋 Commit Tiplerinin Tam Listesi ve Kullanım Kılavuzu
1. feat (Feature)
Ne zaman kullanılır? Yeni özellik eklendiğinde.
feat(auth): sosyal medya girişi eklendi
feat(profile): avatar yükleme özelliği
feat(payment): kripto para desteği
feat(search): gelişmiş filtreleme sistemi
2. fix (Bug Fix)
Ne zaman kullanılır? Hata düzeltmelerinde.
fix(login): sonsuz yükleme döngüsü düzeltildi
fix(cart): yanlış fiyat hesaplama sorunu
fix(api): timeout hatası giderildi
fix(ui): mobil görünüm bozukluğu
3. docs (Documentation)
Ne zaman kullanılır? Dokümantasyon değişikliklerinde.
docs(api): endpoint açıklamaları güncellendi
docs(readme): kurulum adımları eklendi
docs(contributing): PR template eklendi
docs(changelog): v2.0.0 notları
4. style (Formatting)
Ne zaman kullanılır? Kod formatı değişikliklerinde.
style(global): eslint kuralları uygulandı
style(components): class isimlendirmeleri düzeltildi
style(css): gereksiz boşluklar kaldırıldı
style(lint): prettier formatlaması
5. refactor (Code Improvement)
Ne zaman kullanılır? Kod iyileştirmelerinde.
refactor(auth): JWT implementasyonu sadeleştirildi
refactor(db): query optimizasyonları
refactor(utils): yardımcı fonksiyonlar modülerleştirildi
refactor(state): Redux toolkit migrasyonu
6. test (Testing)
Ne zaman kullanılır? Test ile ilgili değişikliklerde.
test(api): entegrasyon testleri eklendi
test(auth): login akışı için unit testler
test(e2e): checkout süreci testleri
test(components): snapshot testleri güncellendi
7. chore (Maintenance)
Ne zaman kullanılır? Bakım ve yapılandırma işlemlerinde.
chore(deps): paket güncellemeleri
chore(build): webpack optimizasyonu
chore(ci): GitHub Actions güncellendi
chore(release): v3.0.0 hazırlıkları
8. perf (Performance)
Ne zaman kullanılır? Performans iyileştirmelerinde.
perf(images): lazy loading implementasyonu
perf(api): response caching eklendi
perf(db): index optimizasyonları
perf(bundle): code splitting
9. build (Build System)
Ne zaman kullanılır? Build sistemi değişikliklerinde.
build(docker): multi-stage build eklendi
build(npm): script optimizasyonları
build(deps): peer dependencies güncellendi
build(webpack): production config iyileştirmeleri
10. ci (Continuous Integration)
Ne zaman kullanılır? CI/CD değişikliklerinde.
ci(pipeline): deployment otomasyonu
ci(tests): test coverage kontrolü
ci(docker): container build süreci
ci(release): otomatik versiyon yükseltme
11. revert (Revert Changes)
Ne zaman kullanılır? Değişiklikleri geri almada.
revert: "feat(auth): sosyal medya girişi"
revert: "perf(api): caching mekanizması"
revert: "refactor(db): ORM migrasyonu"
12. security (Security)
Ne zaman kullanılır? Güvenlik ile ilgili değişikliklerde.
security(auth): XSS açığı giderildi
security(api): rate limiting eklendi
security(deps): güvenlik açığı yamaları
security(forms): input validasyonu güçlendirildi
Özel Durumlar ve İşaretleyiciler
Breaking Changes
feat(api)!: v2 endpoint yapısı
refactor(auth)!: token formatı değiştirildi
build(node)!: minimum version 16 gereksinimi
Çoklu Scope
feat(api,auth): SSO implementasyonu
fix(cart,payment): checkout akışı
refactor(ui,store): state yönetimi
Acil Durumlar
fix(security)!: kritik güvenlik açığı [URGENT]
fix(payment)!: ödeme hatası [CRITICAL]
fix(api)!: servis kesintisi [EMERGENCY]
Bu tip listesi, modern yazılım geliştirme süreçlerinde karşılaşabileceğiniz neredeyse tüm senaryoları kapsar. Her bir tip, değişikliğin doğasını ve amacını net bir şekilde ifade eder, böylece proje tarihçesi daha anlaşılır hale gelir.
- Sık kullanılan acil durum kodları: URGENT, CRITICAL, EMERGENCY, HOTFIX, SECURITY, DEGRADED
Acil Durumlarda Çoklu İşaretleyici Kullanımı
security(auth)!: token sızıntısı [CRITICAL][SECURITY]
fix(payment)!: ödeme hatası [EMERGENCY][DATA]
perf(api)!: servis yavaşlaması [URGENT][DEGRADED]
fix(sync)!: veri kaybı [CRITICAL][DATA][OUTAGE]
🌟 Sonuç
İyi yazılmış commit mesajları, projenizin yaşayan tarihidir. Bu tarih, sadece ne yapıldığını değil, neden yapıldığını da anlatır. Her commit mesajı, gelecekteki ekip arkadaşlarınıza (ve kendinize) bıraktığınız bir mektuptur.
Unutmayın:
- Her commit bir hikaye anlatır.
- Her değişikliğin bir nedeni vardır.
- Her açıklama gelecekte değerlidir.
🔍 Kaynaklar ve İleri Okuma
Son olarak ufak bi’ reklamm.
Kişisel Sitem: https://konukcu.dev/
GitHub Profilim: https://github.com/mehmetext
Bikodist Instagram Sayfam: https://www.instagram.com/bikodist
LinkedIn Profilim: https://www.linkedin.com/in/mehmetkonukcu