git dersleri

Git Dersleri – Neden Versiyon Kontrol Sistemi (VCS)

Merhabalar,
Mobilhanem’de Git yazı serisine başlangıç yapıyoruz. Git dersleri yazı serimizin ilk dersi olan bu dersimizde Neden Versiyon Kontrol Sistemi (VCS) kullanmalıyız sorusuna cevap vermeye çalışacağız.

Git’e başlamadan önce VCS kavramına giriş yapacağız. VCS, Version Control System yani versiyon kontrol sistemi anlamına gelir. Yazılım geliştirmede olmazsa olmaz araçlardan biridir. Sürüm takip sistemi, sürüm yönetim sistemi gibi çevirileri de kullanılır.

Neden VCS Kullanmalıyım?

Peki neden böyle bir araca ihtiyacımız var. Bunu birkaç örnekle açıklamaya çalışalım.

Yedekleme ve Veri Kaybı

Diyelim ki bir müşteriye yazılım geliştiriyorsunuz. Hangi teknoloji ile hangi programlama dili ile geliştirdiğinizin bir önemi yok. Genellikle yazdığınız kaynak kodu yerel geliştirme ortamınızda yer alıyor. Bu kaynak kodun herhangi bir disk kazası ile elinizden uçup gitmesini nasıl engelleyebilirsiniz? Aklınıza bir sürü yöntem geliyordur. Sürekli kaynak kodu farklı ortamlarda saklayabilirsiniz. Örneğin bir diske kaydedebilirsiniz. Geliştirme aşamasındaki yaptığınız her adım aslında o yazılımın farklı bir versiyonunu oluşturuyor. Her versiyonu ayrı ayrı yedeklemek zorunda kalmak sizi yormaya başlıyor.

Farklı bir yöntem daha düşünelim. Diyelimki yazılan kodu internet ortamında kaydedelim. Bunu yapabileceğiniz yine bir çok yöntem var. Herhangi bir disk alanı veren bir servis, uygulama vs. kullanabilirsiniz. Google Drive, Dropbox örnek gösterilebilir.

Zamanı geri alabilir misiniz?

Diyelim ki yedekleme sorununu çözdük. Gelelim başka bir soruna yazılımın az önce yaptığınız her değişiklik o yazılımın farklı versiyonunu oluşturuyordu. Sürekli yeni satırlar eklerken, var olan satırları da siliyoruz. Günün birinde kaynak kodunuzun eksi bir versiyonuna dönmek istediniz. Bunun için IDE’ler bize kolaylık sağlıyor fakat bunu anlık olarak yapıyor. Örneğin o yazılımın 1 ay önceki haline dönmeniz bu yöntemle mümkün olmuyor. O zaman her versiyonu ayrı ayrı dosyalarla kaydetmek gerekiyor. Diyelim ki bunları zip olarak kaydettik. Bu sefer dosyalarınızda yazilimim.zip,yazilimim-yeni-versiyon.zip, yazilim-son.zip, yazilim-vallaha-son.zip gibi isimlendirmeler yer almaya başlıyor. Bu versiyonlara açıklama girmek veya semantik versiyonlama da kullanılabilir. Diyelim ki birden fazla müşteriniz var ve her müşteriye aynı yazılımın farklı versiyonunu sunuyorsunuz. Bu sefer yazilim-xmusterisi-1.0.0.zip gibi isimlendirmeler vermek durumundayız. Örneğin y müşterisine yaptığınız değişiklikleri x müşterisine de uygulamak istiyorsunuz. İşiniz gittikçe daha da zorlaşıyor. Doğal olarak bu yöntem de verimli bir yöntem değil.

Ekip halinde nasıl çalışabilir misiniz?

Başka bir soruna daha geçelim. Biliyorsunuz yazılım projeleri genellikle bir kişi tarafından yürütülmez. Aynı kod üzerinde birden fazla kişi ile çalışmak zorundasınız. Diyelim ki iki kişi çalışıyorsunuz. Peki iki kişi arasında kaynak kod paylaşımını nasıl sağlayacaksınız? En ilkel yöntem yine bir harici bir disk ile dosyaları paylaşabilirsiniz. Tahmin edersiniz ki bu da verimli bir yöntem olmamakla beraber aynı zamanda zaman kaybına yol açar. Yine benim versiyon kontrol sistemlerinden bihaber olduğum zamanlardaki gibi FTP sunucusu kullanabilirsiniz. Fakat yukarıda bahsettiğimiz sorunlarla yine aynı problemleri yaşarsınız. Diyelim ki aynı dosya üzerinde çalışıyorsunuz. Siz bir dosyayı aldınız değişiklik yaptınız. Ahmet ise sizinle beraber aynı dosyayı değiştirmek durumda ve sizinle beraber aynı dosyayı değiştirdi. Önce siz kaydettiniz ve FTP sunucusuna gönderdiniz. Daha sonra Ahmet çalışmasını tamamladı ve aynı dosyayı kendi yerelinde yaptığı değişikliği gönderdi. Bu durumda sizin yaptığınız değişiklik kaybolmuş oldu. Bu daha sonra ciddi sorunlara hatta kavgalara sebep olabilir.

Bu sorunlar bir versiyon kontrol sistemi kullanılmadığı durumlarda ortaya çıkan en temel sorunlar. Bu sorunları motivasyon amacı ile açıkladım. Gelelim versiyon kontrol sistemlerine. Bu sistemler aslında bir yazılımdır. Versiyon kontrol sistemleri de kategorilere ayrılır. Bunlara sonraki yazılımda değineceğiz. Bütün bu sistemlerin en temel özellikleri bu sorunları çeşitli yollarla çözmekle beraber yazılımınız için zaman tüneli oluşturur. İstediğiniz versiyona hızlı ve kolay bir şekilde geçebilmenizi, ekip halinde çalışabilmenizi, değişiklikleri kimin ve neden yaptığını, kendi bilgisayarınızdan canlı yayına (production) kadar olan süreçte size oldukça fayda sağlar. İyi bir geliştirici sadece yazılımı iyi yapmanın yanında o yazılımın geliştirme sürecini de versiyonlamak zorundadır.

Git Dersleri yazı serimizin ilk dersi olan bu yazıda Neden Versiyon Kontrol Sistemi (VCS) öğrenmeniz ve kullanmanız gerektiğini açıklamaya çalıştık. Umarım sizi öğrenmeye motive etmiştir.

İlerleyen derslerde hangi versiyon sistemlerinin neler sağladığını ve çalışma mantığını anlatacağız. Adını daha önceden duymuş olabileceğiniz CVS, SVN, Git, Mercurial gibi sistemlerin arasındaki farkları görmüş olacağız.

Konu hakkında görüş ve sorularınızı yorum kısmından veya Soru & Cevap sitemizden sorabilirsiniz.

Bir sonraki yazıda görüşmek üzere…

Git derslerinin tamamı için tıklayınız.

59

Ömer Özkan

Genelde Java teknolojileri ile geliştirme yapar. Özgür ve açık kaynak yazılımlara meraklıdır. Boş zamanlarında gönüllü eğitimler verir. Onun için Clean Code, Test Driven Development gibi konular oldukça önemlidir.

2 Yorum

  • Birçok eğitim birşeyin ne olduğunu anlatmadan nasıl çalıştığını anlatmakla başlıyor. Bu da herhangi bir altyapısı olmayan kişiler için öğrenme sürecini uzatıyor ve motivasyonu düşürüyor.
    Siz ise hikaye anlatır gibi, kısa tarihsel bilgiler vererek kullanıcıya neden-sonuç bağlamında güzel bir format sunuyorsunuz.
    Ellerinize sağlık, kendi adıma çok istifade ettiğimi söyleyebilirim.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?