# Semantic Versioning

Adres: https://softwaredictionary.org/tr/terimler/semantic-versioning
Kategori: Sürüm Kontrolü
Son güncelleme: 2026-09-30
Türkçe karşılığı: anlamsal sürümleme, semantik versiyonlama
Okunuşu: simentik vörjıning

Kısaca: Semantic versioning, her bölümün bir sürümün uyumluluğu bozduğunu, özellik eklediğini ya da hata düzelttiğini belirttiği MAJOR.MINOR.PATCH şemasıdır.

## Semantic versioning nedir?

Sıklıkla SemVer olarak kısaltılan semantic versioning, yazılım sürümlerine anlam taşıyan sürüm numaraları verir. `2.4.1` gibi bir sürüm üç bölümden oluşur: major (ana) sürüm (2), minor (ara) sürüm (4) ve patch (yama) sürümü (1). Geliştiriciler yalnızca iki sürüm numarasını karşılaştırarak bir yükseltmenin ne kadar riskli olabileceğini anlayabilir.

Kurallar basittir. Geriye dönük uyumlu hata düzeltmeleri için patch numarasını, mevcut kodu bozmayan yeni özellikler için minor numarasını, kullanıcıların kodunu güncellemesini gerektirebilecek uyumsuz değişiklikler için major numarasını artırın. Üst bir bölüm arttığında alttaki bölümler sıfırlanır; yani `2.4.1`'den sonra yeni bir özellik sürümü `2.5.0`, uyumsuz bir sürüm ise `3.0.0` olur. `0.9.2` gibi `0` ile başlayan sürümler, her şeyin her an değişebileceği erken geliştirme aşamasını gösterir.

Semantic versioning, bir güncellemenin üzerindeki uyarı etiketi gibi çalışır: patch sessiz bir onarımdır, minor sürüm hiçbir şeyi yerinden oynatmadan yeni bir şey ekler, major sürüm ise bağımlı olduğunuz şeyleri yeniden düzenleyebilir. Paket yöneticileri buna büyük ölçüde güvenir. npm'in `package.json` dosyasında `^2.4.1` gibi bir aralık 2.4.1'den itibaren her 2.x sürümünü kabul ederken, `~2.4.1` yalnızca 2.4'ün daha yeni patch'lerini kabul eder; sürümler Git'te de çoğu zaman `v2.4.1` gibi etiketlerle işaretlenir.

SemVer, araçların zorunlu kıldığı bir şey değil, insanların verdiği bir sözdür; dolayısıyla bir sürüm yine de yanlışlıkla bir şeyleri bozabilir. Ayrıca, Ubuntu gibi projelerin kullandığı (örneğin `24.04`) ve sayıların uyumluluğu değil yayın tarihini yansıttığı takvim sürümlemesinden (calendar versioning) de farklıdır. Ön sürümler (pre-release), tireden sonra `3.0.0-beta.1` gibi bir etiket ekler ve nihai `3.0.0` sürümünden düşük kabul edilir.

## Önemli noktalar

- Sürümler `2.4.1` gibi MAJOR.MINOR.PATCH biçimini izler.
- Uyumsuz değişiklikler için MAJOR, uyumlu yeni özellikler için MINOR, hata düzeltmeleri için PATCH artırılır.
- Üst numara arttığında alt numaralar sıfırlanır.
- `0.x` sürümleri, genel API'nin henüz kararlı olmadığı anlamına gelir.
- npm'deki `^` ve `~` gibi aralıklar, hangi güncellemelerin güvenle yüklenebileceğine SemVer'e bakarak karar verir.

## Örnek: Sürümleri etiketlemek ve yükseltmek

```bash
# Mark a release in Git with a version tag
git tag -a v2.4.1 -m "Fix crash on empty cart"
git push origin v2.4.1

# Let npm bump the version in package.json and create the tag
npm version patch   # 2.4.1 -> 2.4.2 (bug fix)
npm version minor   # 2.4.2 -> 2.5.0 (new feature)
npm version major   # 2.5.0 -> 3.0.0 (breaking change)

# How dependency ranges in package.json read:
# "^2.4.1" allows >=2.4.1 <3.0.0
# "~2.4.1" allows >=2.4.1 <2.5.0
```

## Sık sorulan sorular

**Uyumsuz değişiklik (breaking change) nedir?**

Uyumsuz değişiklik, yazılımı kullanan mevcut kodun çalışmaz hale gelmesine yol açabilecek her değişikliktir; örneğin bir fonksiyonu kaldırmak, bir seçeneği yeniden adlandırmak ya da bir fonksiyonun döndürdüğü değeri değiştirmek gibi. Semantic versioning'de uyumsuz bir değişiklik yeni bir major sürüm gerektirir.

**package.json içindeki şapka (^) ne anlama gelir?**

`^2.4.1` gibi bir şapka aralığı, npm'in aynı major numarasına sahip sonraki her sürümü yüklemesine izin verir; yani `2.9.0` kabul edilir, `3.0.0` edilmez. `0.x` sürümlerinde daha katıdır: `^0.4.1` yalnızca `0.4.x` patch'lerine izin verir.

**1.0.0 sürümü ne anlama gelir?**

Semantic versioning'de `1.0.0`, kararlı bir genel API'ye sahip ilk sürümdür. Ondan önce `0.x` sürümleri ilk geliştirme içindir ve uyumsuz değişiklikler herhangi bir sürümde olabilir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
