Sitemap

Kaotik commit geçmişine son: Conventional Commits ile tanışın

5 min readOct 26, 2024

--

🌟 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:

  1. Bu değişiklik neden yapıldı?
  2. Nasıl bir çözüm uygulandı?
  3. 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

  1. Conventional Commits Specification
  2. Angular Commit Message Guidelines
  3. Semantic Versioning

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

--

--

No responses yet