Sürüm kontrolü
, zaman içinde bir dosyada veya dosya grubunda yapılan değişikliklerin kayıt altına alınmasını, bu değişikliklerin takibini ve gerektiğinde eski sürümlere kolayca dönülmesini sağlayan bir sistemdir.
Yazılım geliştirirken sürüm kontrolü sistemi kullanılması, takım çalışmasını, kaynak kod yönetimini, değişikliklerin izlenmesini ve hata ayıklamayı kolaylaştırır. Ancak kod ve takım ölçeği büyüdükçe bu işlemler sancılı hale gelebilir. Bu yüzden sürüm kontrol sistemlerinin daha verimli kullanılması için bazı stratejiler (merge strategies
, branching models
) devreye girer.
Git
, dağıtık bir sürüm kontrol ve kaynak kod yönetim sistemidir. Git’in dağıtık yapısı, yazılım geliştirmeyi ve takibini daha kolay ve etkili hale getirir. Ancak Git ile başlamadan önce, sürüm kontrol sistemlerinin çeşitlerini ve özellikle dağıtık bir sürüm kontrol sisteminin sağladığı kolaylıkları, artıları ve eksileriyle birlikte inceleyeceğiz.
Yerel Sürüm Kontrol Sistemleri
Kullanıcı, bir dosyada yaptığı değişiklikleri kendi yerel sisteminde gerçekleştirir. Başlangıçta, bu değişikliklerin yerel sistemde kaydedilip sürümlenmesi mantıklı bir yaklaşımdır. Bu sayede, herhangi bir sunucuya gerek kalmadan kullanıcı yaptığı değişiklikleri kolayca takip edebilir. Ancak bu yöntem, takım çalışmasını desteklemekten uzaktır.
Merkezi Sürüm Kontrol Sistemleri
Sürüm kontrolünün merkezileşmesi, yerel sürüm sistemlerine kıyasla takım iş birliğini mümkün kılmıştır. Tüm sürümleri içerek tek bir sunucu ve dosyaları bu merkezi yerden kontrol eden bir dizi istemciye sahiptir. İstemciler sadece en son anlık görüntüsüne ulaşabilir. Tam geçmiş sadece merkezi sunucuda barındırılır.
Artıları
- Ayrıntılı kontrol imkanı sağlar.
- Tek bir sistemi yönetmek, her istemcideki yerel veritabanları ile uğraşmaktan çok daha kolaydır.
Eksileri
- Tek bir hata noktası
- İstemcinin yapılan değişikleri kaydetme, izleme ve takip işlemleri için bir bağımlılığının olması bu işlemlerin uzun sürmesini sağlayabilmesi.
Dağıtık Sürüm Kontrol Sistemleri
Dağıtık sürüm kontrol sisteminde, merkezi yapıda olduğu gibi sunuculardan istemcilere dosya grupları dağıtılır. Ancak fark olarak, en son anlık görüntü tüm geçmişiyle birlikte yansıtılır. Her klon, aslında tüm verilerin eksiksiz bir yedeğidir.
Artıları
- Her geliştirici, yerel makinesinde tam bir depo kopyasına sahip olduğundan bağımsız çalışabilmeyi sağlar.
- Her klonun eksiksiz birer yedek olması
Eksileri
- Versiyon çakışmaları daha sık yaşanabilir
- Merkezi Denetim Eksikliği
Git nasıl çalışır?
Git, dağıtık yapısı gereği, işlemlerini anında gerçekleştirir. Sadece clone
, pull
ve fetch
komutlarında ağ gecikmesi yaşanabilir. Neredeyse her operasyonun yerelde gerçekleşmesi, Git’i merkezi yapıya sahip rakiplerine kıyasla daha hızlı hale getirir.
Git’e kaydedilecek veri üç farklı durumda bulunur: modified
, staged
ve comitted
.
Değiştirilmiş dosyalar ilk olarak modified
durumuna gelir. Git, bu değişiklikleri henüz veritabanına kaydetmemiştir. Değişikliklerin veritabanına kaydedilmesi için dosyaların staged
durumuna getirilmesi gerekir. Bu aşamada, hangi değişiklikleri veritabanına eklemek istediğimizi işaretlememiz gerekir. staged
durumundaki dosyaların değişiklikleri veritabanına kaydedilmeye hazırdır. Dosyalar veritabanına kaydedildiğinde comitted
durumuna geçer. Bu süreç döngüsel olarak sürekli bir takip sağlar.
Daha detaylı açıklamak gerekirse, yukarıdaki görseli referans alarak, working tree
, dosya grubunuz içerisinde değişiklikler yaptığınız çalışma alanını temsil eder. Bu alandaki veriler comitted
durumundadır, yani bu verilerle yapılmış değişiklikler güvenli bir şekilde yerel veritabanında olduğunu ifade eder. Eğer burada bir dosyada değişiklik yaparsak, bu dosya modified
durumuna gelir. git add
komutuyla, dosya grubu içerisindeki hangi değişikliklerinin veritabanına kaydedileceğini belirtiriz. Bu işlemden sonra dosya staged
durumuna geçer. git commit
komutuyla ise, işaretlenmiş değişikliklerin veritabanına kalıcı olarak kaydedilmesini sağlarız.
Sonuç olarak, sürüm kontrol sistemleri yazılım geliştirme süreçlerinin vazgeçilmez bir parçası haline gelmiştir. İster yerel, ister merkezi, isterse dağıtık yapıda olsun, bu sistemler, kod yönetimi, iş birliği ve hata ayıklama gibi kritik alanlarda büyük kolaylık sağlar. Git, sunduğu dağıtık yapı ve yüksek performans sayesinde bu sistemler arasında öne çıkmaktadır.
İleri okumalar