Daha önceleri pek kullanmadığım sürüm kontrol sistemleri zamanla ihtiyaç haline geliyor. Sahibinden.com’da çalışmaya başladığımda bazı yenilikler ile tanıştım, bunlardan biri de Git ile tanışmam oldu, sağ olsun arkadaşların yardımı ile yavaş yavaş öğrenmeye başladım.

Ben burada kendi öğrenme sürecimde öğrenebildiklerimi sizlerle paylaşmak istedim. Bu konuda daha başlangıç seviyesindeyim. Anlatacaklarım daha çok başlangıç seviyesinde olacak.

Bir projede tek başına çalışıyor iken çalışma süreci boyunca belli aralıklarla çalıştığım dosyaların bir yedeğini alıp arşiv klasörümde saklıyorum. Farklı sürümlerin yedeklerini alıp çalışmak bilgisayarda iş yapan herkesin kazanması gereken bir özelliktir, yoksa çok acı örneklerle öğrenmek zorunda kalırız.

Tek başımıza çalışırken yedekleme ile aşabildiğimiz sürüm kontrolünü birden fazla kişinin çalıştığı projelerde ise bir programcık vasıtası ile yapmak şart halini aldı. Aslında tek kişi çalışılan durumlar içinde sürüm kontrol araçları kullanılabilir.

Birden fazla kişinin çalıştığı durumlarda aynı dosya üzerinde çalışma imkanı sağlar sürüm kontrol araçları. Projenin bir takım çalışması ile ve veri kaybına neden olmadan çalışmasını sağlayan araçlardır sürüm kontrol sistemleri.

Sürüm kontrol sistemi olarak sadece Git yoktur, aşağıda diğer sistemleri sıralanmıştır.

  • Subversion
  • Mercurial
  • Perforce
  • Bazaar

Sadece isimleri verip geçeceğim. Farklı sistemleri karşılaştıran birçok site var. http://whygitisbetterthanx.com/ sitesinden Git’in diğerlerine göre avantajlarını görebilirsiniz.

Git’in en büyük farkı merkezi değil, dağıtık olması. Bu şu anlama geliyor tek merkezli bir yapı yerine dağıtık bir yapıya sahip bir sistem kullanılır. Dağıtık sistemlerdeki avantaj sistemi kullanmak için merkezi bir depoya sahip değildir, kullanıcı internetin olmadığı yerlerde sistemi kullanma imkanı sağlıyor. İnternete veya sisteme bağlandığımızda değişiklikler sisteme aktarılır. Bu bize çok büyük esneklik sağlar.

Yukarıdaki grafikte çok iyi bir şekilde göstermektedir.

“…… Merkezi sistemlerde tüm bilgi bir noktada saklanır. İstemciler ağ üzerinden depo üzerinde yaptıkları değişiklikler gönderirler. Bu değişiklikler merkezdeki depoya uygulanır ve depo yeni bir hal alır. Değişikliklerden haberdar olmak için işlemcilerin merkeze uğraması gerekir. Sürümler arasındaki farkları sorgulamak gibi temel bir takım işlemler için hep merkezdeki bilgilere danışılması gerekir.

Dağınık sistemlerde ise bütün üstbilgiler (önceki sürümler v.b.) yerel bilgisayarda saklanır. Bu nedenle bir merkeze ihtiyaç duymadan tüm işlemleri yapabilmeniz mümkündür.

Çalışmalarınızla ilgili tüm üstbilgilerin bir merkezde saklanması, veri yedeklemenin önemini arttırır. Halbuki bunun aksine, dağıtık sistemlerde bir depoyu alan her geliştirici çalışmanın bütün kopyasına sahiptir, dolayısı ile ne kadar geliştirici varsa, o kadar yedekleme yaparsınız. Bu nedenle geliştiriciler birbirlerine de bağımlı değillerdir. …………” (1)

Şirkette Mac kullanılıyor ve git işlemlerini komut sistemi üzerinden yapıyoruz. Terminal üzerinde komutları yazıyoruz. Git kullanımı kolaylaştırmak için bazı programlar var, ancak biz genelde komut satırlarını kullanıyoruz.

Git Komutları

İlk başta sadece master dallanması vardır.

git status: Bulunduğumuz durumu gösteren koddur. Yapılan değişiklikleri, eklemeler ve silinen dosyaları gösterir.

$git status

git branch:Oluşturulan dallanmaları(brach) görmek için

$git branch

git-create-branch: Bu kod sadece bizim şirkete özel bir kod, (kendime notlar) :D Yeni bir dallanma(branch) oluşturmak için. -x kısayolu oluşturulan dalanmanın kategorisini belirler. Bizde en çok kullanılan iki kategori var düzeltme(fix) ve özellik(feature). Düzeltme(fix) için -x ; Özellik(feature) için -e kısa yollarını kullanıyoruz.

$git-create-branch -x dallanma_ismi

git pull:master’dan güncel hali almak için

$git pull

git add:Depoya bir dosya eklemek için

$git add dosya_yolu/dosya_adi

Birden fazla dosya eklemek için arada boşluk bırakarak ekleme yapılabiliyor.

$git add dosya_yolu/dosya_adi dosya_yolu/dosya_adi dosya_yolu/dosya_adi

git commit: Değişiklikleri yaptıktan sonra yorum ekliyoruz. -am kısaltması all ve message baş harflerini ifade eder.

$git commit -am "yorum_yaz"

git push: Yorumu yazdıktan sonra dosyaları gönderiyoruz

$git push

git checkout: Dallanma(Branch) değiştirmek için

$git checkout branch_ismi

ilk defa geçilen bir branch ise

$git checkout origin/feature/branch_ismi --track

git grep: Mevcut branch içinde bir kelime veya ifadeleri bulamak için

$git grep "aranacak_kelime"

komutunu kullanıyoruz.

git merge: Eğer yaptığımız değişiklik ile aynı anda başkasıda bir şeyler yaptı ise çakışma(conflict) oluyor, düzeltmek için birleştirme(merge) işlemini yapıyoruz.

$git merge master

veya

$git merge origin

yapıp değişiklikleri görebiliyoruz. Bu komutu yazdıktan sonra çakışmanın olduğu dosyayı açıyoruz.

# MASTER / ORIGIN

git merge master
git merge origin

# <<<<< HEAD
@MASTER
======================
@REVISION-2
>>>>>>>>>>>>

Şeklinde bir işaretlerle karşılaşırız. Burada hangi alan doğru ise onu bırakıp diğer alanı silerek dosyayı kaydediyoruz ve dosyanın son hali o oluyor.

git push: Lokalde yaptığımız değişiklikleri uzak suncuya göndermek için kullandığımız komuttur. Bu komutu yazdığımızda değişikliklere artık tüm kullanıcılar erişebilir hale gelir.

$git push

git help: son olarak bir komut hakkında yardım almak için

$git help komut_adi

ile komut hakkında bilgi alabiliyoruz.

Sonuç

Başta söylediğim gibi Git konusunda daha yeniyim, öğrenme sürecim devam ediyor. Bana öğrenme sürecimde yardımcı olan arkadaşlarımada teşekkür ediyorum, özellikle Doruk, bu konuda bildiğim bir çok şeyi ondan öğrendim.

Kaynaklar

jQuery'nin sonu mu geldi?

Uzun seneler web siteleri kodlarken nimetlerinden yararlandığımız jQuery, mobilin yükselişi ile gündemin ana maddesi olan performans sonr...… Devamını oku

jQuery'den kurtulma seansları. data() vs. dataset

04 July 2017 tarihinde yayınlandı.

CSS ile büyük kardeşe söz geçirme

21 March 2017 tarihinde yayınlandı.