---
title: Etiketleme
source: 'https://academia.sh/tr/kurslar/surum-kontrolune-giris/etiketleme'
course: 'Sürüm Kontrolüne Giriş'
language: tr
updated: '2026-08-17T18:10:48+00:00'
license: 'CC BY-SA 4.0'
---

# Etiketleme

Tarihçedeki belirli noktalara kalıcı ad verme; hafif etiket ile etiket nesnesinin farkı, dördüncü nesne türü, etiketle konum belirleme ve anlamlı sürümleme.

Tarihçedeki noktalar buraya kadar kırk karakterlik kimliklerle ya da `HEAD~1` gibi göreli
gösterimlerle anıldı. İkisi de kalıcı ad değildir: kimlik akılda tutulamaz, göreli gösterim
tarihçe büyüdükçe başka bir işlemeyi gösterir.

**Etiket (tag)**, belirli bir işlemeye verilen sabit addır. Dal uçlarından farkı, yeni işleme
yazıldığında yerinden kıpırdamamasıdır: dal ilerler, etiket durur.

## Hafif Etiket

En yalın biçim, bir ada bir işleme kimliği bağlar:

```bash
git tag v1.0.0 498105a
git tag -l
```

```
v1.0.0
```

```bash
cat .git/refs/tags/v1.0.0
```

```
498105a461806443b43bf3287f41a9fe045f7ef8
```

Dosyanın içeriği doğrudan işleme kimliğidir. **Hafif etiket (lightweight tag)**, nesne
veritabanında yeni bir nesne oluşturmaz; yalnızca bir başvuru dosyası yazar.

```bash
git cat-file -t v1.0.0
```

```
commit
```

Ad bir işlemeyi gösteriyor. Etiketin kimin, ne zaman ve neden koyduğu hiçbir yerde kayıtlı
değil. Yayımlanan bir sürümü işaretlemek için bu yetersizdir.

```bash
git tag -d v1.0.0
```

```
Deleted tag 'v1.0.0' (was 498105a)
```

## Etiket Nesnesi

```bash
git tag -a v1.0.0 -m "İlk kararlı sürüm: arama, harf duyarsızlığı, hata kodu" 498105a
git cat-file -t v1.0.0
```

```
tag
```

Nesne türü değişti. **Açıklamalı etiket (annotated tag)**, ikinci konuda tanıtılan dört nesne
türünün sonuncusudur ve nesne veritabanına yazılır:

```bash
git cat-file -p v1.0.0
```

```
object 498105a461806443b43bf3287f41a9fe045f7ef8
type commit
tag v1.0.0
tagger Deniz Kaya <deniz@ornek.test> 1710309600 +0300

İlk kararlı sürüm: arama, harf duyarsızlığı, hata kodu
```

Beş bileşen vardır: işaret edilen nesnenin kimliği, türü, etiket adı, etiketi koyan kişi ile
zamanı ve açıklama metni. Yapı, işleme nesnesine benzer — ve aynı kuralla adlandırılır:

```bash
git rev-parse v1.0.0
```

```
8fa8557633aff60f8bc5bce08050ea0c524d866f
```

Bu kimlik etiket nesnesine aittir, işlemeye değil. İşaret edilen işlemeye ulaşmak için tür
dönüşümü istenir:

```bash
git rev-parse "v1.0.0^{commit}"
```

```
498105a461806443b43bf3287f41a9fe045f7ef8
```

Komutların çoğu bu dönüşümü kendiliğinden yapar; ayrım yalnızca nesnenin kendisi sorulduğunda
görünür.

```bash
git show v1.0.0 --stat
```

```
tag v1.0.0
Tagger: Deniz Kaya <deniz@ornek.test>
Date:   Wed Mar 13 09:00:00 2024 +0300

İlk kararlı sürüm: arama, harf duyarsızlığı, hata kodu

commit 498105a461806443b43bf3287f41a9fe045f7ef8
Author: Deniz Kaya <deniz@ornek.test>
Date:   Tue Mar 12 09:48:00 2024 +0300

    Aramanın harf duyarsızlığını README'de belirt

 README.md | 2 ++
 1 file changed, 2 insertions(+)
```

Çıktı önce etiketi, sonra işaret ettiği işlemeyi gösterir.

| Ölçüt | Hafif etiket | Açıklamalı etiket |
|---|---|---|
| Nesne oluşturur mu | Hayır | Evet |
| Koyan ve zaman kaydı | Yok | Var |
| Açıklama metni | Yok | Var |
| Kullanım | Geçici, yerel işaret | Yayımlanan sürüm |

## Etiketleri Listelemek

Listeleme seçeneği tamamlandıktan sonra ikinci bir sürüm işaretlenir:

```bash
git tag -a v1.1.0 -m "Listeleme seçeneği (-l) eklendi"
git tag -l
```

```
v1.0.0
v1.1.0
```

```bash
git tag -l "v1.0*"
```

```
v1.0.0
```

```bash
git tag -n
```

```
v1.0.0          İlk kararlı sürüm: arama, harf duyarsızlığı, hata kodu
v1.1.0          Listeleme seçeneği (-l) eklendi
```

Etiketler tarihçe listesinde de görünür:

```bash
git log --oneline --decorate -n 5
```

```
396729b (HEAD -> main, tag: v1.1.0) README'de -l seçeneğini belgele
701fa37 Tüm terimleri listeleyen -l seçeneğini ekle
498105a (tag: v1.0.0) Aramanın harf duyarsızlığını README'de belirt
a58791f Revert "Arama çıktısını yalnızca Türkçe sütuna indir"
ad60f31 Arama çıktısını yalnızca Türkçe sütuna indir
```

Başvuruların tümü tek komutla da listelenebilir:

```bash
git for-each-ref refs/tags
```

```
8fa8557633aff60f8bc5bce08050ea0c524d866f tag	refs/tags/v1.0.0
2054d80edbfbbb29b1da99ba01f3e121b7b50a39 tag	refs/tags/v1.1.0
```

İkinci sütun nesne türünü verir; hafif etiketlerde bu sütunda `commit` yazardı.

## Etikete Göre Konum

```bash
git describe
```

```
v1.1.0
```

Etiketten sonra yeni bir işleme yazıldığında çıktı değişir:

```bash
git describe
```

```
v1.1.0-1-g2aff8c5
```

Üç bölüm vardır: en yakın etiket, o etiketten bu yana yazılan işleme sayısı ve şu anki
işlemenin kısaltılmış kimliği. Kimliğin başındaki `g`, değerin bir git nesnesi olduğunu
belirtir. Bu dizgi, çalıştırılabilir bir programın sürüm bilgisine gömüldüğünde, elde bulunan
ikili dosyanın tam olarak hangi işlemeden üretildiğini söyler.

## Anlamlı Sürümleme

Etiket adı serbesttir; ancak sürüm işaretlemede yaygın bir düzen vardır: **anlamlı sürümleme
(semantic versioning)**. Sürüm numarası noktayla ayrılmış üç sayıdan oluşur ve her sayının
artışı bir söz verir:

| Bölüm | Ne zaman artar | Kullanıcıya söylediği |
|---|---|---|
| Ana | Geriye dönük uyumluluk bozulduğunda | Uyarlama gerekebilir |
| Ara | Uyumlu yeni yetenek eklendiğinde | Var olan kullanım bozulmaz |
| Yama | Yalnızca düzeltme yapıldığında | Davranış aynı, kusur giderildi |

Örnek depoda `v1.0.0` ilk kararlı sürümü, `v1.1.0` ise geriye dönük uyumlu bir yetenek
eklenmesini işaretledi: `-l` seçeneği önceki kullanımı bozmuyor, yalnızca yeni bir çağrı
biçimi ekliyor. Betiğin çıkış kodları değiştirilseydi ana sürümün artması gerekirdi.

Düzenin değeri, numaranın kendisinden çok verdiği sözdedir. Geriye dönük uyumluluk kavramı
Programlama Temelleri kursunda dil seçimi bağlamında tanımlanmıştı; sürüm numarası, aynı
kavramın makine tarafından okunabilir bir bildirimidir.

## Etiketin Sınırları

Etiketler taşınabilir ama taşınmamalıdır. Bir etiket yayımlandıktan sonra başka bir işlemeye
kaydırılırsa, o etiketi daha önce almış kopyalar eski işlemeyi göstermeye devam eder; aynı ad
iki farklı içeriği adlandırır hâle gelir. Yayımlanmış bir etiketin işaret ettiği nokta
değiştirilmez; gerekiyorsa yeni bir etiket konur.

Silme de aynı sorunu taşır. Yerelde silinen bir etiket, deponun başka kopyalarında durmaya
devam eder.

Etiketler işlemelerin dışındaki nesneleri de işaret edebilir — bir bloba ya da bir ağaca etiket
konabilir. Uygulamada bu seyrek kullanılır; etiketin olağan hedefi bir işlemedir.

## Özet

- Etiket, bir işlemeye verilen ve yeni işlemelerle yer değiştirmeyen sabit addır.
- Hafif etiket yalnızca bir başvuru dosyasıdır; açıklamalı etiket, koyanı ve açıklamayı
  saklayan ayrı bir nesnedir.
- Etiket nesnesi dördüncü nesne türüdür ve diğerleriyle aynı kuralla adlandırılır.
- `git describe`, en yakın etiketten bu yana kaç işleme geçtiğini ve şu anki kimliği verir.
- Anlamlı sürümleme, üç sayılı bir numarayla geriye dönük uyumluluk sözü verir.
- Yayımlanmış etiketler taşınmaz ve silinmez; gerektiğinde yeni etiket konur.

## Kurs Kapanışı

Kurs boyunca tek bir depo kuruldu ve on sekiz işlemeyle bugünkü hâline geldi:

```bash
git log --oneline --decorate
```

```
2aff8c5 (HEAD -> main) Bileşik terim örneği ekle
396729b (tag: v1.1.0) README'de -l seçeneğini belgele
701fa37 Tüm terimleri listeleyen -l seçeneğini ekle
498105a (tag: v1.0.0) Aramanın harf duyarsızlığını README'de belirt
a58791f Revert "Arama çıktısını yalnızca Türkçe sütuna indir"
ad60f31 Arama çıktısını yalnızca Türkçe sütuna indir
18600c5 README'ye kullanım bölümü ekle
bfe57d3 Öbek ve dizi terimlerini ekle
cb8f7ee Yerel notları izlemeden çıkar
7783378 Yerel notları ekle
9b23cc3 Üretilen dosyaları yoksayma listesine al
ece664b Küme terimini ekle
2c883a7 Eşleşme bulunamadığında hata bildir
60e13bd Aramayı büyük/küçük harften bağımsız yap
43370ca Üç veri yapısı terimi ekle
3132c78 Biçim örneğindeki yazımı düzelt
546c174 Terim arama betiği ekle
13d31bf Terim listesini ve biçim belgesini ekle
```

Bu listede kursun yapısı görünür: dosyaların eklenmesi, atomik işlemeler, bir hatanın
işlenmesi ve devrilmesi, yoksayma kurallarının kurulması ve iki sürümün etiketlenmesi.

Kursun asıl konusu komutlar değil, altlarındaki modeldi. Dört nesne türü — blob, ağaç, işleme,
etiket — içerik adresli depolamayla adlandırılır; işlemeler öncül bağlarıyla bir yönlü
çevrimsiz çizge kurar; hazırlık alanı bu çizgeye eklenecek bir sonraki anlık görüntüyü
biriktirir. Bütün komutlar bu üç cümlenin sonucudur. Değiştirme neden yeni bir kimlik üretir,
devirme neden tarihçeyi bozmaz, aynı içerik neden aynı kimliği verir — üçünün de yanıtı
modeldedir.

Kurs boyunca bir konu bilinçli olarak dışarıda bırakıldı: tarihçe hep tek zincir olarak kaldı.
Oysa çizge tanımı dallanmaya izin veriyordu ve `--graph` çıktısının tek sütun çıkması bir
sınırlama değil, bu deponun özelliğiydi.

Sıradaki kurs — **Dallanma ve İşbirliği** — o sütunu çoğaltıyor. Dalın bir işaretçiden ibaret
olduğu, iki dalın nasıl birleştirildiği, çakışmaların nasıl çözüldüğü ve tarihçenin uzak
depolarla nasıl eşlendiği orada ele alınacak. Bu kursta kurulan model orada da geçerlidir:
dal, `refs/heads` altında bir dosyadan; birleştirme ise iki öncüllü bir işlemeden ibarettir.
