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. internette küçük bir arama ile 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 branch:Oluşturulan dallanmaları(brach) görmek için
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 pull:master’dan güncel hali almak için
git add:Depoya bir dosya eklemek için
Birden fazla dosya eklemek için arada boşluk bırakarak ekleme yapılabiliyor.
git commit: Değişiklikleri yaptıktan sonra yorum ekliyoruz. -am kısaltması all ve message baş harflerini ifade eder.
git push: Yorumu yazdıktan sonra dosyaları gönderiyoruz
git checkout: Dallanma(Branch) değiştirmek için
ilk defa geçilen bir branch ise
git grep: Mevcut branch içinde bir kelime veya ifadeleri bulamak için
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.
veya
yapıp değişiklikleri görebiliyoruz. Bu komutu yazdıktan sonra çakışmanın olduğu dosyayı açıyoruz.
Ş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 help: son olarak bir komut hakkında yardım almak için
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
- http://inchoo.net/tools/basic-git-usage-from-console/
- foch.com.tr/versiyon-kontrol-git-svn-cvs.html
- http://mhazer.blogspot.com/2010/12/versiyon-yonetim-sistemi-olarak-git.html
- kodcu.com/2011/04/git-mi-subversion-mi/
- http://net.tutsplus.com/tutorials/other/the-perfect-workflow-with-git-github-and-ssh/
- http://net.tutsplus.com/tutorials/other/easy-version-control-with-git/
- http://tr.wikipedia.org/wiki/S%C3%BCr%C3%BCm_Kontrol_Sistemi
- http://book.git-scm.com/4_finding_with_git_grep.html
- http://www.ndpsoftware.com/git-cheatsheet.html
- kimbs.cn/2010/11/git-essence/
- [http://people.core.gen.tr/~aycan.irican/web/publish/GitSKS.html][]