VCS, Git, GitHub, Bitbucket Nedir? | GitHub kullanımı

1- Versiyon Kontrol Sistemleri Nedir? Git Nasıl Kullanılır?

Anlamakta ve kullanmakta zorluk çektiğimiz terimlerdir
Versiyon Kontrol Sistemi(VCS),
Git,
Github,
Bitbucket,
Subversion vs. gibi terimler.

Ne olduğu hakkında aşağı yukarı bir bilgimiz vardır evet ama henüz kullanmamışsak, nasıl ve neden kullanıldığı hakkında biraz kafamız karışır.

2- Bu karmaşanın önüne geçebilmek için önce Versiyon/Sürüm Kontrol Sistemi nedir? Neden ihtiyaç duyarız konusuna değinelim

Versiyon Kontrol Sistemi (VCS)

Geliştirme aşamasındaki bir yazılımın zaman zaman yedeklenmesi gerekir.

Bu yedekleme işini bilgisayarınıza veya bir diske(harici disk, usb vs.) kaydedebilirsiniz. Ancak bu aşamada bir önceki kaydettiğiniz yedeğinizin üzerine, yeni geliştirmeler yaptığınız hali ekleyip kaydederseniz kodun önceki haline ihtiyaç duyduğunuzda hüsrana uğrayabilirsiniz.

Bu durumun önüne geçmek için her yedeği .zip’leyerek anlamlı isimler vererek kaydetmeyi deneyebilirsiniz. Peki ya her geliştirme farklı bir firma/müşteri/ürün için ayrı şekilde inceleniyorsa, bu sefer isimlendirmeler bir hayli karmaşık bir hal almaya başlayacaktır.

Diyelim bu durumla da başa çıkmanın bir yolunu buldunuz, bu kodlara her zaman erişebileceğiniz online bir platforma ihtiyaç duyduğunuzda ne yapacaksınız?

Senaryo bu ya, onunda çaresini buldunuz. Yedekleriniz için Google Drive, ICloud vs. gibi bulut sistemlerini kullanmaya başladınız.
Peki ya bu projede bir ekip ile çalışıyorsanız?
Ekipteki herkes projenin farklı kısımları için geliştirmeler yapıyorlarsa?
Ekipten biri ile senkron olamayıp aynı kod satırına müdehale ettiyseniz?
Bu ve bunun gibi kaotik durumları nasıl yöneteceksiniz?

Bunları manuel şekilde yedekler alarak halledebilmeniz oldukça güçleşecektir. Bu durumu sağlıklı yönetebilmek için sizin yukarıda anlatıldığı gibi çabalamanıza ve Amerika’yı yeniden keşfetmenize hiç gerek yok.

İşte versiyon kontrol sistemleri bu ve bu gibi durumlarda hayatlarımızı kurtarıyorlar.

Bu sistem, yazılım ekibinin zaman içinde kaynak koddaki değişiklikleri yönetmesine yardımcı olan bir sistemdir.

Versiyon kontrol sistemleri, koddaki her değişikliğin özel bir veritabanı türünde kaydını tutar. Bir hata yapılırsa, geliştiriciler, tüm ekip üyelerinin en az zaman kaybı ile hatayı düzeltmesine yardımcı olur. Aylardır geliştirme yaptığınız bir projenin birinci ayın sonunda nasıl olduğunu görmek istediğinizde, rahatlıkla görebilirsiniz. Ayrıca ne gibi değişiklikler, hangi geliştirici tarafından yapılmış bunların da kontrolünü sağlayabilirsiniz.

3- Git nedir? Github nedir?

Git ve Github genelde birbiri ile karıştırılır.
Git, Bugüne kadar, dünyada en yaygın olarak kullanılan modern sürüm kontrol sistemi Git’dir. 

2005 yılında Linux işletim sistemi çekirdeğinin ünlü yaratıcısı Linus Torvalds tarafından geliştirilmiştir.
Masaüstü programdır.
Ücretsiz veya ticari kullanıcılar için ücretli üyelik modeline sahiptir.
Projede yapılan değişiklikleri zaman, kullanıcı bilgisi, versiyon numarası gibi bilgilerle birlikte tutar.
Kullanımı kolay olmakla birlikte bir çok IDE(Integrated Development Enviroment) üzerinde iyi çalışmaktadır.

4- Git’e benzeyen diğer versiyon kontrol sistemleri ise

SVN(Subversion),
CVS(Concurrent Versions System) gibi sistemlerdir

Şimdi ise GitHub’dan bahsedelim. Öncelikle Git ile GitHub ‘ın farklı şeyler olduğunu söyleyelim.

5- GitHub Nedir?

GitHub, versiyon kontrol sistemi olarak Git kullanan yazılım geliştirme projeleri için web tabanlı bir depolama servisidir.  Git ile oluşturulan kod depolarını bulutta saklamayı sağlayan bir servistir. VCS ler arasında en fazla GitHub kullanılır.

GitHub aracılığı ile geliştirdiğiniz projelerinizi, faydalanacağını düşündüğünüz insanlarla paylaşabilirsiniz. Hatta belki projenizin ekibine, dünyanın çeşitli yerlerinden insanları ekleyebilir, projenizi GitHub üzerinden yönetebilirsiniz. Ekibinizde çalışanların projenin hangi konumunda yer alacağını belirleyebilirsiniz. Kişinin yaptığı çalışmaları inceleyebilirsiniz ve bu çalışmaların ne kadar sürede tamamlandığını kontrol edebilirsiniz. Görev takibi ve yetkilendirmeler böylece çok daha kolay hale gelir.

GitHub’da proje oluşturmak ve yukarıda bahsettiğim özellikleri kullanmak için öncelikle www.github.com sitesin üye olup, oturum açmanız gerekmektedir. Üyelik ücretsizdir.

5.1 – GitHub kullanmadan önce bilmeniz gereken temel Git kavramları ;

Repository (Depo): GitHub üzerinde barındırılan proje depolarıdır. GitHub’da tuttuğunuz her proje için bir repository (kısa adı ile repo) oluşturursunuz.

Branch (Dallanma):  Bu kavramı repository’nin alt klasörleri olarak düşünebilirsiniz. Projemizi dallara ayırmamızı sağlar. Her bir branch ayrı bir depo alanı gibi düşünülebilir.

Git’te oluşturduğunuz bir repository’nin içine projenizi depolayacağınız ilk andan itibaren bir branch üzerine çalışırsınız. Bu, Git’in varsayılan olarak atadığı “master branch” dir. Ve eğer siz master’dan farklı olarak, özel bir branch açmadıysanız, projeniz default olarak master branch üzerinde çalışmaya başlar.

5.2 – Peki ne için branch’lere ihtiyaç duyulur?

Kısaca bir örnek üzerinden açıklamak gerekirse;

Ana branch’te çalışır halde bir projeniz var. Siz bu projenize yeni bir feature eklediniz fakat yeni feature’ın henüz çalışır durumda olup olmadığından emin değilsiniz. Bu durumda ana branch’teki düzgün çalışan projenize zarar vermemek adına geliştirmeniz için yeni bir branch açmayı ve orada çalışmayı deneyebilir, yeni geliştirmenizin testlerini yapıp sağlıklı sonuç verdiğine emin olduktan sonra, ana branch’inize kodunuzu kopyalayabilirisiniz.

Bu kısa örnekten sonra yazılım süreçlerinde yaygın olarak kullanılan bir Git Branch modelinden bahsedelim.

5.3- Branch modeli (Git flow)

Temelde yazılım geliştirme yaşam döngüsü boyunca bir repository’e iki ana branch ile çalışılır. Bunlar Master ve Developer branchleridir.

Master branch (ana branch), genellikle projenin yayınlanmaya hazır haldeki kısımlarını tutar.
Developer branch ise, geliştirme evresinde olan ve yeni sürümde yayınlanacak olan projenin son halinin kaynak kodlarını barındırır.
Developer branch’inde her şey yolunda gidiyorsa ve proje testlerden geçmişse master branch’i ile birleştirilir. Bu birleştirme işlemleri “merge etmek” olarak anılır.

Master ve Developer branch haricinde kullanılan paralel branch’ler de mevcuttur. Bunlardan biri Feature branch’tir.

Feature Branch: Bir proje için oluşturduğunuz her task(proje için oluşturulmuş görev) ve bu tasklarda geliştirmeyi planladığınız her feature için ayrı bir feature branch açabilirsiniz.
Feature branch’leri, developer branch’inin altında olmak zorundadır.
Proje ekibinden herkes farklı feature branchlerinde çalışabilir. Ancak geliştirmenin sonunda feature branch’lerin her biri developer branch’ine merge edilmelidir.

Feature branch’leri ile çalışmanın en büyük avantajı, o branch’te çalışılan özelliğin fail etmesi, bekleneni vermemesi durumunda master’ın developer’ın ve diğer feature branch’lerinin hiç bir şekilde etkilenmemiş olmasıdır.

Akılda kalıcılığını arttırmak amacıyla ufak bir senaryo oluşturalım;  Ayşe ismindeki geliştirici bir e-ticaret sitesinin ödeme sayfasındaki, kartlı ödeme alanını geliştiriyor olsun. Bu feature’ın adı, “K123-Kartli Odeme Secenegi” şeklinde olsun.

Ayşe, “K123-Kartli Odeme Secenegi” isminde bir feature branch oluşturur. İlgili geliştirmeyi gerçekleştirir. Bu geliştirmenin çalıştığından emin olduktan sonra developer branch’ine gönderir. Developer branch’indeki tüm geliştirmeler yeniden test edildikten ve emin olunduktan sonra master branch’ine merge’lenir.

Diğer paralel branchlerin isimleri ise Release branch’ler, Hotfix branch’lerdir.

Release Branch: Yeni bir versiyon güncelleme yapacağınız zaman versiyonadki son değişiklikler bu brach üzerinden yapılır, sürüm numarası bu brach’te güncellenir ve değişiklikler bittiğinde hem developer hem de master branchlerine merge edilir. Ardından release branch’i silinir.

Hotfix Branch: Yayınladığınız yeni versiyonda önemli bir hata keşfettiniz ve bu hatanın acilen çözülmesi gerekiyor. Bu gibi durumlarda bir hotfix branch açılır. Ardından hata bu branchte giderilir ve developer ile master branchlerine merge edilir. Daha sonra hotfix branch’i silinir.

Fork: GitHub kullanmadan önce bilmeniz gereken bir diğer kavram ise fork kavramıdır. Baştada söylediğim gibi GitHub’da herhangi birinin projesini alıp geliştirebilirsiniz ve bu geliştirdiklerini o projenin sahibiyle paylaşarak projeye katkı sağlayabilirisiniz. Fork, projeyi kendinize kopyalamanızı(clone etmeyi) sağlıyor. Birini projesini clone’ladığınızda sizin local bilgisayarınızda bu projenin aynısından bir local repository oluşur ve yaptığınız değişiklikler, sizde oluşan yeni repository’e kaydolur. Projenin orjinali bu değişiklikten etkilenmez.

(Not: Clone işlemi hep en başta yapılır, her seferinden tekrar edilmez. Yeni değişiklikler çekileceği zaman “pull” edilir.)

Clone’ladığınız projeye katkı sağlamak, değişiklikleri proje sahibi ile paylaşmak istiyorsanız, ilgili local repository’nizi, GitHub üzerinde bir remote repository’e push etmeli/taşımalısınız.

Ardından proje sahibine “Pull Request” göndermelisiniz.

Pull Request: “Ben sizin projenizin üzerinde şu değişiklikleri yaptım, eğer sizin için de uygunsa değişikliklerimi sizin projenize ekleyip katkıda bulunmamı kabul edin” demektir. Proje sahibi pull requesti onaylarsa değişiklikler, forklanan projenin orjinaline merge edilir. 

Gelelim en basit haliyle GitHub’ın Nasıl kullanıldığına…

6-  GitHub’ın Nasıl Kullanılır?

Öncelikle bilgisayarınıza, kullandığınız işletim sistemine uygun olacak şekilde Git’i yüklemeniz gerekmektedir. Bu siteden faydalanarak yükleyebilirsiniz. (https://help.github.com/articles/set-up-git/)

Talimatları takip edip Git’i yükledikten sonra git komutlarını artık kullanabilir haldesiniz demektir.

Ardından bilgisayarınızda oluşturduğunuz bir proje için git deposu yaratabilirsiniz. Git’e depolayabilmek için projenizin ne ile ilgili olduğunun hiç bir önemi yoktur.

6.1 – Örneğin ben bir Java projesi oluşturdum.

Terminali açtım, ve aşağıdaki komut ile projemin bulunduğu dizine gittim.

$ cd /Desktop/ilk_github_repo

Ardından git init komutu ile projemin içine bir git deposu oluşturdum.

$ git init

Siz de projenizin klasöründe gizli bir klasörün yaratıldığını göreceksiniz. Bu sizin git deponuz (veya local repository/repo).
İçerisine girdiğinizde deponuz ile ilgili sizin için oluşan dosya ve klasörlerin detaylarını görebilirisiniz.

Şimdi terminal ekranına git status yazalım, bu komut projenizde yapılan değişiklikleri, git deponuzdaki kodunuz ile kıyaslar. Ve depoda bulunmayan hangi değişiklikler varsa onları size listeler.  Daha önceden git  reponuza hiç bir şey eklemediğiniz için şuan her değişikliği yeni bir değişiklik olarak görüyor ve gösteriyor.

$ git status

Şu aşamada içinde bulunduğumuz dizinde hangi çalışmamız bulunuyorsa onu git depomuza ekleyebiliriz. Bunu git add . veya git add -A komutunu kullanarak yapabilirsiniz.

git add . 

Bu komut ile bilikte o dizinde eklediğiniz veya üzerinde değişiklik yaptığınız her dosya git deponuza eklenecektir. Eğer sadece bir dosyayı eklemek isterseniz git add dosya_adi komutunu kullanabilirsiniz.

Sıra git depomuza eklediğimiz dosyaların versiyonuna isim vermekte.

Bunu  git commit -m “initial commit/başlangıç kaydı” şeklindeki komutu kullanarak yapabilirsiniz. Her commit için açıklamanızı, kodunuzdaki değişikliği açıklar biçimde yapmanız, sizin kullanımızını kolaylaştırır.

git commit -m “initial commit/başlangıç kaydı”

Sonraki aşamada ise projenizi uzak bir depoya kaydetmek. İster GitHub isterseniz Bitbucket gibi servisleri kullanarak uzak depo/repo yaratabilirisniz, Bitbuckettan henüz bahsetmediğimiz için size

6.2 – GitHub üzerinden nasıl olduğunu göstereceğim;

  •  github.com sitesinde, kullanıcı adı ve şifrenize giriş yaptıktan sonra profilinize gidin,
  • Ardından “New” butonunu tıklayın.
  •  Sizden repository’niz için bir isim ve “READ ME” (Beni oku) bölümü için açıklama isteyecektir. İlgili alanları doldurun.
  • Aşağıda “Public/Private” seçenekleri göreceksiniz. Github üzerinden istediğiniz kadar public repo oluşturabilirsiniz. Ancak private repolarınızıen fazla 3 kişi bir repoda çalışabilecek şekilde ücretsiz kullanabilirsiniz. Private repoları 4 veya daha fazla collaborator ile kullanacaksanız ticari sürüme geçip ücret ödemeniz gerekmektedir.
  • Aşağıda “Public/Private” seçenekleri göreceksiniz. Github üzerinden istediğiniz kadar public repo oluşturabilirsiniz. Ancak private repolarınızıen fazla 3 kişi bir repoda çalışabilecek şekilde ücretsiz kullanabilirsiniz. Private repoları 4 veya daha fazla collaborator ile kullanacaksanız ticari sürüme geçip ücret ödemeniz gerekmektedir.
  • Tüm bu ayarları yaptıktan sonra “Create Repository” diyebilirsiniz.
  • Ardından repository’niz için generate edilen https://… ile başlayan linki kopyalayın.
  • Sonra yeniden terminal ekranına geri dönün. Ve şu komutları yazın;
$ git remote add origin https://github.com/kizgibikodla/github_usage.git

(burada sizin kullanıcı adınız ve repository isminiz yazıyor olmalı)

  • Sona yaklaştınız, şimdi tüm yaptıklarınızı oluşturuğunuz repository’e push etme vakti.
$ git push -u origin master

Ve ilk github kaydınızı oluşturdunuz. Artık sizin de github hesabınızda bir repository’niz var 🙂

 


Şu aşamadan sonra yaptığınız her değişiklik için git init ve git remote add origin https://github.com/kizgibikodla/github_usage.git komutları hariç diğerlerini her yeni değişiklik için kullanabilirsiniz. Bu komutları kullanmanız, zaten oluşturduğunuz ve kullanmakta olduğunuz bir reponuz olduğu için hatalı olacaktır. Ama diğer komutları her değişiklik için kullanmalısınız.

6.3- Yeniden en baştan ilk oluşturma ve kaydetme komutlarını yazalım;

$ git init    
$ git status
$ git add .
$ git commit -m “initial commit/başlangıç kayıt başlığı”
$ git remote add origin https://github.com/kizgibikodla/github_usage.git
$ git push -u origin master

6.4- Şimdi de ikinci committen itibaren kullanmamız gereken komutları listeleyelim;

$ git status
$ git add .
$ git commit -m “xxx commit/ikinci kayıt başlığı”
$ git push -u origin master

Commitlerinizde yaptığınız değişiklikleri, GitHub üzerinden, verdiğiniz commit başlıklarınızı tıklayarak detaylı şekilde inceleyebilirsiniz.


7- Şuan sadece TEK branch ile çalışmayı inceledik

Tek başınıza çalışıyorsanız bir proje için master brac’hinde yukarıda anlattığım şekilde rahatlıkla çalışabilirisiniz. Ancak bir ekiple çalışacaksınız ve iş süreçlerinde güvenlik, kod kalitesi vs. gibi öncülleriniz varsa, developer ve bahsettiğim diğer branchlere ihtiyaç duyarsınız. Bu şekildeki kullanım için ayrı bir yazı yazmayı planlıyorum. 


 

8- Bitbucket Nedir?

Hazır versiyon kontrol sistemlerinden bahsedilen bir blog yazısı yazıyorken Bitbucket’a da değinmeden olmaz.

Bitbucket, Jesper Nohr tarafından kurulmuştur. 29 Eylül 2010’da Atlassian firması tarafından satın alınan Bitbucket, ilk kurulduğunda yalnızca Mercurial (Tıpkı Git ve SVN gibi versiyon kontrol sistemidir) depolama desteği verirken bu satın alınmanın ardından 2011 tarihinde Git desteği vermeye başlayan bir versiyon kontrol sistemi platformudur.
Python frameworkü olan Django ile geliştirilmiştir.

Tıpkı GitHub ile arasındaki en büyük fark eğer bir proje üzerinde 5 kişi veya daha az geliştirici ile çalışıyorsanız projenizi private(dışarıya kapalı) biçimde ücretsiz olarak geliştirebilirsiniz. Ancak 5 kullanıcıyı aştığınızda ticari sürümünü kullanmanız gerekecektir. Eğer siz de ufak ekibiniz ile veya tek başınıza private projeler geliştirmek istiyorsanız bu servisi kullanmanızı öneririm.

Bu giriş bilgilerinden sonra GitHub için bahsettiğim adımları kullanarak Bitbucket’ta da bir repository oluşturabilirsiniz. Öncelikle bir https://bitbucket.org sitesinden bir kullanıcı hesabı alın, ardından GitHub’taki gibi bir repository oluşturun ve daha sonra yine yukarıda (Başlık: 6.3)  bahsettiğim komutlar ile reponuzu oluşturabilirsiniz.

Versiyon kontrol sistemleri ile ilgili yazımın ilk bölümünü bu şekilde sonlandırıyorum. Bir sonraki yazımda ise farklı branclerin, Pull Request, Fork, Merge gibi kavramların gösterildiği bir örnek ile VCS yazıma ilaveler yapacağım.

Okuduğunuz için teşekkürler, sorularınız için [email protected]‘u kullanabilirsiniz.

 

“VCS, Git, GitHub, Bitbucket Nedir? | GitHub kullanımı” için 4 cevap

  1. Eline sağlık 🙂 Github’ı çok duydum ama sayende çok güzel anladım 🙂
    Yazmaya devam et 🙂 Kolay gelsin.

  2. Eline sağlık 🙂 Github’ı çok duydum ama sayende çok güzel anladım 🙂
    Yazmaya devam et 🙂 Kolay gelsin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir