Her Yazılımcının İhtiyacı Git’i Neden Kullanırız?
Merhaba!
Yazılım dünyasında bir kavramı ve bir teknolojiyi neden kullandığımızı anlamak çok önemlidir. Bu yazıda Git Versiyon Kontrol Sistemi’nin neden kullanıldığından bahsedeceğim. Giriş kısmı bana ait olan yazıda Atlassian’ın Why Git makalesinden yararlandım.
Versiyon Kontrol Sistemi
Bilgisayarımızdaki dokümanlar için versiyon belirtirken doküman_v1, doküman_v2, doküman_sonhali gibi isimlendirmeler yaparız. Bu isimlendirmenin amacı üzerinde çalıştığımız dosyaların değişik evrelerdeki halini tutabilmektir.
Yazılım geliştirirken ise bu tarz bir yaklaşım yeterli olmayacaktır. Çünkü projelerimizde birçok dosya yer alır. Takım halinde geliştirme yaparız ve projede bulunanlar düzenli olarak değişiklik yaparlar.
Git, bu noktada imdadımıza yetişir. Ücretsiz ve açık kaynak kodlu, dağıtık bir versiyon kontrol sistemidir. Hızlı, güvenilir ve efektif bir şekilde değişiklikleri yönetmenizi sağlar. Projelere eklenen yeni özellikleri, yapılan değişiklikleri sistemli bir şekilde tutmamıza yarar. Kullanım alanı yazılım sektörüyle sınırlı olmasa da ben bu yazıda neden yazılımcılar için önemli olduğundan bahsedeceğim.
Yazılımcılar için Git
Özellik Temelli İş Akışı (Feature Branch Workflow)
Git’in en büyük avantajlarından biri dallandırma(branching) yetenekleridir. Özellik dalları(Feature branchler), kodunuzda yaptığınız her değişikliği ayrı bir ortamda yapmanızı sağlar. Kodun varolan halini etkilemeden yeni bir branch açarsınız. Geliştirmelerinize o dalda(branch) te devam edersiniz.
Projede bir değişiklik gerektiğinde bir özellik dalı(feature branch) açarız. O dalda değişiklikleri yaparız. Böylelikle değişiklikler esnasında bir hata olması durumunda ana dal etkilenmeyecektir.
Dağıtık Geliştirme (Distributed Development)
Git, bir dağıtık versiyon kontrol sistemidir. Her bir yazılımcı, sunucuda bulunan projenin bir kopyasını kendi bilgisayarına alır.
Bu durumda internet bağlantısı zorunluluğu olmadan yerel deponuzda(local repository) işlemler yapabilirsiniz. Projenin eski versiyonlarına dönmek kolaydır. Commitler arasındaki yapılan değişiklikleri kendi bilgisayarınızda kontrol edebilirsiniz.
Dağıtık geliştirme ayrıca yazılım takımının verimli çalışmasını sağlar. Takımdaki herkes aynı anda farklı özellikleri geliştirebilirler.
Dağıtık geliştirme, tıpkı özellik dallarındaki(feature branch) gibi daha güvenilir bir ortam sağlar. Bir kişi kendi bilgisayarında hata yapsa bile uzak depoyu(remote repository) kopyalar ve yeniden geliştirmeye başlayabilir.
Çekme Talebi(Pull Request)
Bitbucket gibi birçok kaynak kod yönetim ürünü, Git’in temel özelliklerini çekme talebi(pull request) ile güçlendirir. Pull request, bir yazılımcının diğer yazılımcıya yaptığı değişiklikleri onaylayıp ana dala(branch) birleştirmesini sormasının yoludur.
Diyelim ki projeye yeni bir özellik eklemek istedik. Bunun için bir özellik dalı açarız. Özellik dalında geliştirmelerimizi yaparız. Geliştirmeleri tamamladıktan sonra açtığımız özellik dalını ana dala çekme talebi yaparız. Çekme talebindeki değişiklikleri ekip arkadaşlarımız gözden geçirir, kodlar beraber incelenir. Bir hata, eksik görülmediğinde çekme talebi onaylanır ve yapılan değişiklikler ana dala aktarılmış olur.
Komünite
Git, açık kaynak kodlu projeler arasında çok kullanılan bir araçtır. Üçüncü parti kütüphaneleri kolayca kullanabilirsiniz.
Açık kaynak topluluğundaki kişiler projeleri çatallama(fork) işlemi ile kendi depolarına alırlar. Projeler üzerinde geliştirmeler yaparlar ve çekme talepleri ile kendi değişikliklerini ana projeye gönderirler. Ürünler ve projeler böylelikle komünite desteği ile gelişmektedir.
Türkiye’deki açık kaynak projelere farkındalığı ve desteği arttırmayı amaçlayan bir platform olan acik-kaynak.org u ziyaret edebilirsiniz.
Hızlı Sürüm Yayınlama Döngüsü(Faster Release Cycle)
Yazıda bahsettiğim özellik dalları, dağınık geliştirme, çekme talepleri ve komünite desteği daha hızlı sürümler çıkmanızı sağlar. Yazılımcılar küçük değişiklikleri çevik bir iş akışı ile daha seri yapabilirler.
Git, sürekli entegrasyon(Continuous Integration (CI)) ve sürekli dağıtım(Continuous Delivery (CD)) kavramları ile birlikte çok güzel çalışmaktadır. Git’teki kanca(hook) kavramı depolarda(repository) herhangi bir olay olduğunda scriptler çalıştırmamızı sağlar. Git depolarımıza atılan commitlerden otomatik dağıtım yapmamızı sağlayan araçlar vardır. Bu sayede dağıtım süreçlerini otomatize ederiz ve zamandan kazanırız.
Kaynak: