Not: Bu dökümanlarda geçen çoğu bilgi çeşitli kitaplara, web sitelerine ve benim o kaynaklardan anladıklarıma dayanarak yazılmıştır. Bu dökümanların hazırlanmasındaki ana amaç İngilizce olarak bolca mevcut olan kaynakları bir şekilde çevirerek Türkçe olarak potansiyel kullanıcılara aktarmaktır. Çevirilerin yapıldığı kaynaklar olabildiğince sayfanın alt kısmında listelenecektir.
Tahminime göre kod yazma işiyle meşgul kişilerin başına gelebilecek en büyük sıkıntı, yazmakta olduğu uygulamaların bulunduğu saklama ortamının göçüvermesidir. Bu sıkıntı ise yedek bir saklama ortamı kullanımı ile ortadan kaldırılabilir. Hatta artık Dropbox gibi servisler sayesinde en azından bu servislerin ömürleri boyunca elinizdeki dosyaların tüm geçmişine ulaşımınız mümkün olabiliyor.
Fakat kod yazma işlemi mevzubahis olunca, bütün dosyaların uçuvermesinden ziyade bir kaç gün önce kod üzerinde yaptığınız değişiklikler yüzünden bazı fonksiyonlar çalışmayıverince başınız daha çok ağrıyabiliyor. Sonrasında gelsin "Hayda! neyi değiştirmiştim ki acaba?" lar, gitsin "Hmm, sanırım şunu değiştirmiştim! yok yok bunu değiştirmiştim! Yine olmadı, tüh!" minvalinden saatlerinizi yiyen yakınmalar.
İşte bu durumda, karşımıza Sürüm Kontrol Sistemi çıkıyor:
Sürüm Kontrol Sistemi (Version Control System - VCS), Düzeltme Kontrol veya Kaynak kontrol, belge, program ve bilgisayar dosyaları gibi depolanan diğer bilgilerin değişiklik yönetimidir. Yaygın olarak, takımdaki kişilerin aynı dosyayı değiştirebildiği yazılım geliştirmede kullanılır. Değişiklikler "düzeltme sayısı", "düzeltme seviyesi" veya basitçe "düzeltme" olarak adlandırılan, genellikle sayı veya harf kotlarıyla tanımlanır. Örneğin, dosyanın ilki "düzeltme 1" olarak ayarlanır. İlk değişiklik yapıldığında dosya bu kez "düzeltme 2" şeklinde olur. Böylece her değişiklikte dosya adı değişir.
Bu konseptleri anlatırken ben genelde metin bazlı kaynak kodlarını materyal olarak kabul edeceğim. Fakat bu sistemleri Pro Git1 kitabında da bahsedildiği üzere geçmiş işlerini kaybetmek istemeyen görsel tasarımcılar, yazarlar vs. de her tip dosya üzerinde kullanabilir.
Sürüm kontrol sistemleri üç türe ayrılıyor:
Yerel Sürüm Kontrol Sistemleri
En eski sürüm kontrol sistemidir. İlk örneği, programcıların çalıştıkları klasörleri aynen kopyalayıp (tarih bilgisi de ekleyerek) yedeklemeye dayanır. Bu metodda ise bazen hangi klasörde çalışıyor olduğunuzu unutmanız durumunda yanlış sürümü editlemeye başlama tehlikeniz bulunuyordu. Bu sebeple geliştirici arkadaşlar hangi sürümde ne değişiklikler yapıldığını tutan yerel veritabanları kullanmaya başladılar.
Böylece döneminde oldukça popüler bir sürüm kontrol yöntemi oluveren rcs 80'lerin başlarında ortaya çıktı. Bu sistemde dosyaların saklanması, sürümlendirilmesi, geri çağırılması, birleştirilmesi otomatik hale getiriliyordu.
Bu sistem ise basitçe her sürümdeki dosyaların arasındaki farkı yama setleri olarak saklayan, sonrasında da istendiğinde istenen sürüme kadar olan yamaları birleştirip sunan bir yönteme dayanıyordu.
Pek tabi ki bu metod geliştiricilere yeterli gelmemeye başladı. Başka sistemlerdeki geliştirici arkadaşlarıyla da ortaklaşa çalışmak istediler. Bu da CVCS konseptini doğurdu...
Merkezileştirilmiş Sürüm Kontrol Sistemleri
Ortaklaşa çalışma aşkıyla yanıp tutuşan geliştiriciler, hemen akabinde CVS, SVN ve Perforce gibi sistemler geliştirdiler.
Yıllarca CVS ve Subversion, sürüm kontrol aleminde hüküm sürdü. Bu sistemlerin genel yapısı tüm sürümlenmiş dosyaların saklandığı bir tek sunucu ve bu sunucuya bağlanarak sürümleri çeken ya da ekleyen istemcilerden ibaret idi.
Bu sayede tüm dosyaların saklandığı sunucuyu idare eden kişi, projede kimin neler yapabileceğini belirleyebiliyordu. Pek tabi ki hangi kullanıcının nerede ne değişiklik yaptığını da tüm kullanıcılar yazdıkları kodlarda görebiliyordu.
Fakat bu sistemlerin de Yerel Sürüm Kontrol Sistemlerine göre bir dezavantajı vardı. Üzerinde çalışılan dökümanların bütün sürüm geçmişine yerel olarak erişilemiyordu. Yani sunucuya bağlı olmadığınızda başka bir sürüme geçme şansınız bulunmuyordu.
Bu sorunun üstesinden gelmek için ise DVCS doğdu...
Dağıtık Sürüm Kontrol Sistemleri
Dağıtık sürüm kontrol sistemleri, "tüm döküman geçmişinin sistemi kullanan herkesin elinde bulunması" amacına dayanır. İstemciler dosyaların son halini ya da "x sürümündeki" halini değil, tamamını çekerek tabiri caiz ise sunucunun bir yansısını istemci taraflı saklar.
Bu sayede sunucunun bozulması, çatlaması, yıpranması durumunda dosyalar güvende kalmış olur. Sonrasında yeni bir sunucu toparlandığında bir istemciden dosyalar sunucuya aktarılarak sistem aynen devam ettirilebilir.
Bu tip sistemlerin çoğu aynı zamanda birden fazla dış kaynakla çalışmayı kolayca destekler. Bu sayede aynı projede, aynı anda farklı yöntemlerle ilerleyebilir, sonrasında da isterseniz sonuçlarını birleştirebilirsiniz.
Bu konsepte göre hazırlanmış sistemlere örnek olarak Git, Mercurial, Bazaar ve Darcs verilebilir.
Bu yazı dizisinde odak noktamız Git olacak.