Conventional Commits nedir? Semantic Versioning ve otomatik sürüm/changelog üretimiyle ilişkisi nasıldır?
Cevap
Conventional Commits, commit mesajlarını makinenin okuyabileceği standart bir formatta yazma kuralıdır. Bu sayede commit geçmişinden sürüm numarası ve changelog otomatik üretilebilir.
<tip>(<kapsam>): <kısa açıklama>
feat(auth): Google ile giriş eklendi
fix(cart): indirimli fiyat yuvarlama hatası düzeltildi
docs: README kurulum adımları güncellendi
refactor(api): sipariş servisi sadeleştirildi
feat(api)!: /v1/orders yanıt formatı değişti
BREAKING CHANGE: "total" alanı artık kuruş cinsinden tamsayıYaygın tipler: feat, fix, docs, style, refactor, perf, test, build, ci, chore.
Semantic Versioning (SemVer) ilişkisi
SemVer sürümü MAJOR.MINOR.PATCH şeklinde tanımlar:
| Commit | Sürüm etkisi | Örnek |
|---|---|---|
fix: | PATCH | 1.4.2 -> 1.4.3 |
feat: | MINOR | 1.4.2 -> 1.5.0 |
! veya BREAKING CHANGE: | MAJOR | 1.4.2 -> 2.0.0 |
Otomasyon
- commitlint + Husky
commit-msghook'u ile format kontrolü. - semantic-release, release-please veya Changesets ile CI'da otomatik sürüm numarası, Git tag'i,
CHANGELOG.mdve GitHub Release oluşturma.
npm install -D @commitlint/cli @commitlint/config-conventional
echo "export default { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js
echo 'npx --no -- commitlint --edit "$1"' > .husky/commit-msgSquash merge kullanan ekiplerde genelde sadece PR başlığının bu formata uyması yeterlidir, çünkü main dalında PR başlığı commit mesajı olur.
İ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.