Modül 2 · Repository yönetimi · ⏱ 12 dakika

Releases, tag'ler ve commit geçmişi

Releases, tags and commit history

Bu derste neler öğreneceksin

  • Git tag ile GitHub release arasındaki farkı açıklamak
  • Semantic versioning (semver) kurallarını anlamak
  • Commit geçmişini okumak ve arama yapmak
  • git blame ve git log'un ne zaman kullanıldığını bilmek

Proje sürümlerini ve commit geçmişini yönetmek GitHub’da iki ayrı kavramla yapılır: tag (Git düzeyinde bir işaretçi) ve release (GitHub platform düzeyinde dağıtım paketi).

Git tag nedir?

Tag, commit geçmişinde belirli bir noktayı işaretleyen bir pointer’dır. Genellikle sürüm (release) noktalarını işaretlemek için kullanılır.

İki tip tag:

TipAçıklama
Lightweight tagSadece bir pointer; commit SHA’yı referans eder
Annotated tagEk metadata içerir: author, date, message, GPG imzası
# Lightweight tag
git tag v1.0.0

# Annotated tag (önerilen)
git tag -a v1.0.0 -m "Version 1.0.0 - initial stable release"

# Tag'leri listele
git tag

# Tag'i push et (varsayılan olarak push'ta tag'ler gitmez)
git push origin v1.0.0

# Tüm tag'leri push et
git push origin --tags

Semantic versioning (semver)

GitHub ekosisteminde sürüm numaraları genellikle MAJOR.MINOR.PATCH formatını takip eder:

  • MAJOR: geriye dönük uyumsuz API değişiklikleri (2.0.0)
  • MINOR: geriye dönük uyumlu yeni özellik (1.1.0)
  • PATCH: geriye dönük uyumlu bug fix (1.0.1)

Prerelease suffix’ler:

  • 1.0.0-alpha.1 — henüz stabil değil
  • 1.0.0-beta.2 — test aşamasında
  • 1.0.0-rc.1 — release candidate

GitHub Release nedir?

GitHub Release, bir tag’e bağlı, kullanıcılara sunulan resmi dağıtım paketidir. Release şunları içerebilir:

  • Release notes (değişiklik listesi)
  • Binary assets (compiled executables, ZIP dosyaları)
  • Source code archives (otomatik oluşturulur)

Oluşturmak için: repo → Releases → Draft a new release → Tag seç → Release notes ekle → Publish.

# CLI ile release oluştur
gh release create v1.0.0 --title "v1.0.0" --notes "Initial release" ./build/app.zip

Tag vs. Release: Tag Git düzeyinde bir işaretçidir; release GitHub platformunun üstüne eklenen kullanıcı arayüzü ve asset yönetimidir. Bir release olmadan tag olabilir, ama release her zaman bir tag’e dayanır.

Commit geçmişini okumak

# Tek satır özet
git log --oneline

# Grafik görünüm (branch'lerle)
git log --oneline --graph --all

# Belirli dosyanın geçmişi
git log --oneline -- src/auth.js

# Arama (commit mesajında)
git log --grep="fix login"

# Belirli kişinin commit'leri
git log --author="Yusuf"

# Tarih aralığı
git log --after="2024-01-01" --before="2024-06-01"

git blame

git blame bir dosyanın her satırının hangi commit tarafından ve kim tarafından eklendiğini gösterir:

git blame src/login.js

Çıktı her satırda: commit-SHA | author | date | satır-numarası | içerik

GitHub web UI’da da blame görünümü var: dosya görüntülenirken “Blame” butonu.

git show ve git diff

# Belirli commit'in içeriğini göster
git show a3f8c12

# İki commit arasındaki fark
git diff HEAD~3 HEAD

# Tag'ler arası fark
git diff v1.0.0 v1.1.0

Sınav perspektifinden önemli noktalar

  • Tag’ler varsayılan olarak git push ile gitmez — ayrıca push edilmeli
  • Annotated tag’ler daha fazla metadata içerir ve GPG imzası destekler
  • Release, tag olmadan oluşturulamaz — GitHub önce tag oluşturur veya mevcut tag’i kullanır
  • git log --oneline çıktısındaki kısa hash, tam SHA’nın ilk 7 karakteridir
  • git blame, kim ne zaman değiştirdi sorusunun cevabıdır

Sırada ne var?

Modül 2 tamamlandı. Sonraki modülde collaboration özelliklerine — issues, PRs ve discussions — geçiyoruz.