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

# Sürüm Kontrolü Nedir

Sürüm kontrolünün çözdüğü problem; tarihçe, geri alınabilirlik ve işbirliği sözleri; anlık görüntü ile fark tabanlı saklamanın karşılaştırılması.

Programlama Temelleri kursunda bir programın nasıl yazıldığı ele alındı; bu kurs, yazılan
programın zaman içinde nasıl değiştiğiyle ilgilenir. Bir dosya bir kez yazılıp bırakılmaz:
düzeltilir, genişletilir, bozulur, geri alınır. Bu değişim dizisini kayıt altına almadan
çalışmak, yalnızca son hâli bilinen bir program üretir.

Bu ders sürüm kontrolünün çözdüğü problemi tanımlar ve çözümün taşıdığı üç sözü ayırır.
Komutlar bir sonraki konuda başlar; burada kurulan model, kursun geri kalanında kullanılacak
sözcük dağarcığıdır.

## Elle Sürüm Yönetimi ve Sınırları

Kayıt tutmanın en dolaysız yolu kopyalamaktır: dosyanın bir sürümü çalışmaya başlamadan
önce yedeklenir, sonraki sürüm ayrı bir adla saklanır. Sonuçta şuna benzer bir dizin oluşur:

```
ara.sh
ara-yedek.sh
ara-calisan.sh
ara-son.sh
ara-son-2.sh
```

Bu düzenin dört ayrı kusuru vardır ve dördü de yapısaldır:

1. **Sıra bilgisi yoktur.** Dosya adları hangi sürümün hangisinden türediğini söylemez.
   `ara-son.sh` ile `ara-calisan.sh` arasındaki ilişki yalnızca yazan kişinin belleğindedir.
2. **Gerekçe kaydı yoktur.** Bir satırın neden değiştiği hiçbir yerde yazmaz. Altı ay sonra
   aynı satıra bakan kişi, değişikliğin bir düzeltme mi yoksa deneme mi olduğunu bilemez.
3. **Değişiklik bütünlüğü yoktur.** Bir düzeltme çoğu zaman birden çok dosyaya dokunur.
   Dosya başına kopyalama, bu dosyaların hangi anda birlikte tutarlı olduğunu kaydetmez.
4. **Eşzamanlı çalışma tanımsızdır.** İki kişi aynı dosyanın kopyalarını ayrı ayrı
   değiştirirse, iki kopyayı birleştirmenin kuralı yoktur; biri diğerini ezer.

**Sürüm kontrol sistemi (version control system)**, bu dört kusuru gidermek üzere tasarlanmış
bir kayıt düzenidir. Değişiklikleri dosya dosya değil, **işleme (commit)** adı verilen
bütünler hâlinde saklar; her işlemeye bir gerekçe metni, bir yazar ve bir öncül bağlar.

## Üç Söz

Sürüm kontrolünün sunduğu güvenceler üç başlıkta toplanır.

**Tarihçe.** Her işleme, o andaki proje durumunun tamamını temsil eder ve kendisinden önceki
işlemeye bağlanır. Bu bağ zinciri, "bu satır ne zaman, kim tarafından, hangi gerekçeyle
yazıldı" sorusunu yanıtlanabilir kılar. Kod okumanın önemli bir bölümü bu sorunun
yanıtlanmasıyla geçer.

**Geri alınabilirlik.** Kayıt altına alınmış her durum yeniden elde edilebilir. Bu, cesur
değişiklik yapmayı ucuzlatır: bir denemenin bedeli, denemeyi geri almanın maliyetidir.
Maliyet düşükse deneme sayısı artar. Kursun üçüncü konusu bu geri alma araçlarına ayrılmıştır.

**İşbirliği.** Birden çok kişinin aynı proje üzerinde çalışması, değişikliklerin
birleştirilmesini gerektirir. Sürüm kontrol sistemi, her değişikliğin hangi ortak atadan
türediğini bildiği için birleştirmeyi kurallı bir işleme dönüştürür. Bu kursta işbirliği
yalnızca tasarım kararlarının gerekçesi olarak geçecek; uygulaması Dallanma ve İşbirliği
kursunun konusudur.

## Anlık Görüntü mü, Fark mı

Bir sistemin tarihçeyi nasıl sakladığı, sunabileceği işlemleri belirler. İki temel tasarım
vardır.

**Fark tabanlı saklama.** Sistem, ilk sürümü tam olarak saklar; sonraki her sürüm için
yalnızca önceki sürümden farkı kaydeder. Depolama açısından ekonomiktir. Bedeli, herhangi bir
sürümü elde etmek için baştan başlayıp farkları sırayla uygulamaktır: $k$. sürüme erişmenin
maliyeti $O(k)$'dir.

**Anlık görüntü (snapshot) tabanlı saklama.** Sistem, her kayıt anında projenin tüm dosya
ağacının bir görüntüsünü saklar. Bir sürüme erişmek doğrudan o görüntüye bakmaktır: $O(1)$.
İlk bakışta savurgan görünür — her kayıtta tüm dosyalar yeniden mi yazılacaktır?

Savurganlığı ortadan kaldıran şey **içerik adresli depolama (content-addressed storage)**
fikridir. Her dosya içeriği, içeriğinden hesaplanan bir karma (hash) değeriyle adlandırılır
ve bu adla saklanır. Aynı içerik iki kez saklanmaz; değişmeyen dosyalar ardışık anlık
görüntülerde aynı nesneyi paylaşır. Veri Yapıları kursunda karma fonksiyonlarının çığ etkisi
ve çakışma olasılığı incelenmişti; burada aynı fonksiyonlar bir kimlik üreticisi olarak
kullanılır.

Böylece anlık görüntü modeli, fark modelinin depolama avantajını büyük ölçüde korurken sürüme
erişimi sabit maliyete indirir. Bu kursta anlatılan sistem — `git` — anlık görüntü modelini
kullanır.

## Tarihçenin Biçimi

Tarihçe basit bir liste değildir. Her işleme bir öncül işlemeye bağlanır; bir işlemenin
birden çok ardılı olabilir (aynı noktadan iki ayrı yön denenmiştir) ve bir işlemenin birden
çok öncülü olabilir (iki yön birleştirilmiştir). Bağlar geçmişe doğru yönlüdür ve bir işleme
kendi atası olamaz.

Bu üç özellik, tarihçenin bir **yönlü çevrimsiz çizge** olduğunu söyler. Veri Yapıları
kursunda bu yapı tanımlanmış, Algoritmalar kursunda topolojik sıralaması ele alınmıştı.
Buradaki karşılıklar birebirdir:

| Çizge kavramı | Tarihçedeki karşılığı |
|---|---|
| Düğüm | Bir işleme |
| Kenar | İşlemeden öncülüne bağ |
| Çevrimsizlik | Bir işleme kendi atası olamaz |
| Topolojik sıra | Tarihçenin okunabilir bir sırayla listelenmesi |
| Ortak ata | İki yönün ayrıldığı işleme |

Bir tarihçe listesinin "en yeniden en eskiye" sıralanması, çizgenin topolojik sıralarından
biridir. Dallanma olmayan bir tarihçede bu sıra tektir; dallanma varsa birden çok geçerli
sıra bulunur ve sistem hangisini göstereceğini seçmek zorundadır.

```
(A) ← (B) ← (C) ← (D)        dallanmasız tarihçe: tek zincir

            ┌── (C) ← (D)
(A) ← (B) ←─┤                dallanmış tarihçe: iki yön
            └── (E)
```

Oklar geçmişe doğrudur: her düğüm kendi öncülünü gösterir. Bir işleme yazıldıktan sonra
içeriği değişmez; tarihçe yalnızca uçlarından büyür. Bu **değiştirilemezlik**, geri alma
araçlarının nasıl çalıştığını anlamanın anahtarıdır ve üçüncü konuda tekrar karşımıza
çıkacaktır.

## Yedekleme ile Aynı Şey Değildir

İki düzen de "eski hâli geri getirme" sözü verdiği için karıştırılır; verdikleri söz farklıdır.

**Yedekleme**, bir zaman noktasındaki durumu kurtarmak için tutulur. Amacı veri kaybını
önlemektir; kimin neyi neden değiştirdiğini kaydetmez, iki kişinin çalışmasını birleştirme
kuralı sunmaz. Yedeğin değeri, gereken anda **son** durumu geri verebilmesindedir.

**Sürüm kontrolü**, durumların dizisini ve her adımın gerekçesini tutar. Kurtarma yalnızca bir
sonucudur; asıl ürettiği bilgi, değişimin kendisidir.

İkisi birbirinin yerine geçmez. Bir depo yalnızca bir makinede duruyorsa, o makinenin
kaybolması tarihçeyi de götürür; sürüm kontrolü kullanmak yedeklemeyi gereksizleştirmez.
Bir sonraki ders, dağıtık modelin bu riski nasıl dağıttığını gösterecek.

Ayrım, **neyin kaydedileceği** sorusunu da belirler. Depoya giren şey, insan tarafından
yazılmış ve gerekçesi olan içeriktir: kaynak dosyalar, yapılandırma, belgeler. Derleme
çıktıları ve indirilen bağımlılıklar kaynaklarından yeniden üretilebildiği için tarihçede yer
tutmaları gereksizdir; gizli anahtarlar ise tarihçeye bir kez girdiğinde kalıcı olduğu için
hiç girmemelidir. Bu ayrımın uygulaması, Yoksayma Kuralları dersinin konusudur.

## Kursun Örnek Deposu

Kurs boyunca tek bir örnek proje kullanılacaktır: `sozluk` adlı küçük bir çalışma. İçinde üç
dosya bulunur — bir açıklama belgesi, satır satır terim tutan bir metin dosyası ve bu dosyada
arama yapan bir kabuk betiği. Proje sıfırdan kurulacak, her ders tarihçeyi bir adım
ilerletecek, üçüncü konudaki dersler aynı depoda kasıtlı hatalar yapıp bunları geri alacaktır.

Örneğin küçük olması bilinçlidir: dosya sayısı azaldıkça, nesne veritabanının içeriğini
doğrudan inceleyip modeli gözle doğrulamak mümkün hâle gelir. Kursun amacı komut listesi
ezberletmek değil, bu modeli kurmaktır; komutlar modelden türetilebildiği ölçüde
akılda kalır.

## Özet

- Elle kopyalayarak sürüm tutmak sıra, gerekçe, değişiklik bütünlüğü ve eşzamanlılık
  bilgisini kaybettirir.
- Sürüm kontrol sistemi değişiklikleri dosya başına değil, işleme adı verilen bütünler
  hâlinde saklar.
- Üç temel söz vardır: tarihçe, geri alınabilirlik ve işbirliği.
- Fark tabanlı saklama depolamada, anlık görüntü tabanlı saklama erişimde ucuzdur; içerik
  adresli depolama ikinci modelin depolama maliyetini düşürür.
- Tarihçe bir yönlü çevrimsiz çizgedir; düğümler işlemeler, kenarlar öncül bağlarıdır.
- Yedekleme son durumu kurtarır, sürüm kontrolü durumların dizisini ve gerekçesini tutar;
  ikisi birbirinin yerine geçmez.

## Sonraki Adım

Sürüm kontrolünün ne olduğu tanımlandı; ancak tarihçenin nerede tutulduğu sorusu açık kaldı.
Tek bir sunucuda mı, yoksa her katılımcının makinesinde eksiksiz bir kopya hâlinde mi? Bu
seçim, sistemin hangi işlemleri ağ bağlantısı olmadan yapabileceğini ve bir arıza durumunda
neyin kaybolacağını belirler. Sonraki ders bu iki tasarımı ve sonuçlarını karşılaştıracak.
