Versiyon Kontrol Sistemleri
Olayımız Nedir? Versiyon Kontrolü Nedir? Neden Versiyon Kontrolüne İhtiyaç Duyarız? Merkezi Versiyon Kontrol Sistemi Nedir? Peki ya merkezi olmayan? Ayıp olmasın diye: SVN Sebeb-i ziyaretimiz: Git SVN vs Git Hangisi döver? Social Coding: github Github üzerinde proje inceleme
Versiyon Kontrolü Nedir? Versiyon kontrolü, yazılım geliştirmedeki anlamından bağımsız olarak, bir dökümanın üzerinde yapılan değişikliklerin yönetilmesidir. Burada bahsedilen döküman, Bir ofis belgesi, web sitesi, hatta bir uygulama programı bile olabilir.
Versiyon Kontrolü Nedir? (2) Yazılım geliştirme üzerinde özelleştirirsek, versiyon kontrolü bir yazılımın revizyonlar halinde güncellenerek geliştirilmesini sağlar. Böylece geliştirilen yazılımın geçtiği süreçler rahatça takip edilebilir.
Neden Versiyon Kontrolü? Birden fazla kişinin beraber çalıştığı projelerde proje gelişiminin hızlanması için. Yeni bir özellik üzerinde çalışırken Ben buraya nereden geldim?, O kadar kod yazdım, derlenmezse yandık. dememek için. Açık kaynak projelerde hali hazırda tamamlanmış projeler baz alınarak geliştirilen yeni projelerde süreci kolaylaştırmak için.
Merkezi VKS Nedir? Merkezi versiyon yönetim sistemlerinde tüm kullanıcılar bütün değişikliklerini direkt olarak uzaktaki depo (repository) üzerinde yaparlar. Son revizyonu yapan kullanıcının yeni bir değişiklik yapıp uzak sunucuya göndermesi büyük olasılıkla bir sorun yaratmaz. Başka bir kullanıcı kendi değişikliklerini uzak depoya gönderip nihai hale getirmek istediğinde (commit) ne olacak peki?
Merkezi VKS Nedir?(2) Bu durumda ilk kullanıcının yaptığı değişiklikler yok mu olacak? Ya da ortada karman çorman bir kod yığını mı oluşacak? İkisi de değil. Uzak sunucudaki kodun stabilitesinin korunması için VKS ikinci kullanıcıya önce uzak depodaki kodu çalıştığı kodun üzerine indirmesini (update) isteyecek.
Merkezi VKS Nedir?(3) Uzak sunucudan gelen dosyalar sizin geliştirdiğiniz kodlar ile uygun şekilde birleştirilecek. (merge) Ardından ikinci kullanıcı değişikliklerini sorunsuzca uzak depoya yollayabilecek. Her şey bu kadar toz pembe mi? Tabii ki de hayır.
Merkezi VKS Nedir?(4) Bölüm Sonu Canavarı: Conflict Merge işlemi versiyonun yönetiminin en can alıcı noktasıdır. Fakat bu işlem her zaman tereyağından kıl çeker gibi olmaz. Diyelim ki iki kullanıcı da bir dosyada aynı satırlar üzerinde değişiklik yaptılar. Bu durumda birleştirilen dosyada hangi kullanıcının değişikliği saklanacak? İşte bu ikileme versiyon kontrolü sözlüğünde conflict (çatışma) denir.
Merkezi VKS Nedir?(5) Çatışmayı tatlıya bağlamak: Solve Conflict Bir dosya üzerinde iki değişiklik çatışırsa çoğu zaman bu durumun düzeltilmesi için elle müdahele gerekir. Çatışmalar çözüldükten sonra gereken değişiklikler yapılarak yeni versiyon uzak sunucuya yollanabilir.
Merkezi VKS Nedir?(6) Özet olarak, Merkezi yönetim sistemlerinde asıl amaç elimizdeki versiyonun uzak sunucu ile aynı olmasıdır. Proje bittiğinde, hem uzak sunucuda hem de kullanıcıların elinde aynı versiyon bulunacaktır. Merkezi sistemler içinde en iyilerinden biri ve en yaygını olan SVN (Subversion)'dir.
Merkezi olmayınca nasıl oluyor? Merkezi olmayan sistemlerde versiyonlama iki kademeli olarak gerçekleşir. Merkezi sistemlerde tek depo (repository) ve birçok kullanıcı vardır. Merkezi olmayan sistemlerde ise birçok yerel depo (local repository) ve birçok kullanıcı ile birlikte bir adet de uzak depo (remote repository) bulunmaktadır. Bu tarz sistemlerde, commit işlemi sadece yerel depoyu etkiler. Bu da sözlüğümüze yeni bir kelime ekliyor: Push
Merkezi olmayınca nasıl oluyor? (2) Push eylemi, daha önce yerel makinede commit edilmiş. Bütün revizyonları sırayla uzak depoya uygular. Buradaki süreç merkezi VKS'ler ile neredeyse aynıdır. Uzak depodaki versiyonun yerel depoya indirilmesi işlemine ise merkezi olmayan sistemlerde Pull denir Birleştirme işlemi, çatışma oluşması gibi olaylar aşağı yukarı aynı şekilde gerçekleşir. Merkezi olmayan versiyon kontrol sistemlerinin en güzel örneği Git'tir.
SVN vs Git Git, yerel depolar ile de çalıştığından internete bağlı olmadığınız sürede de kendi değişikliklerinizi kademe kademe versiyonlamanız mümkündür. Yeni başlayanlar için SVN'i anlamak Git'i anlamaktan biraz daha kolaydır. SVN'in yardım dosyaları daha organizedir. Git'te, her yerel depo bir şekilde uzaktakinin yedeği olduğundan veri kaybetmek neredeyse imkansızdır.
SVN vs Git(2) Git'in birleştirme işlemi SVN'e göre kat kat daha iyidir. Conflict oluşma sıklığı daha azdır. Git, disk alanını SVN'e göre kat kat daha verimli kullanır. Git'te uzak sunucuya erişim SVN'e nazaran daha nadir olduğundan versiyonlama işlemi daha hızlı çalışır.
Sorularınız? Teşekkürler