Hafta 2 - Araçlar

4 dakika tahmini okuma süresi

Giriş

Bu yazıda ders için gerekli araçlara ve kurulumlarına değineceğiz, bir önceki dersten acımasızca alarak listeleyeyim:

  • Git
  • Github (kurulum değil, kabul ama hesap açılacak oradan)
  • R
  • RStudio
  • RTools

Git

Git nedir?

Git bir versiyon kontrol sistemidir. Versiyon kontrol sistemi ise bir dosya veya klasörde yapılan değişikliklerin kaydını tutan, ve gerektiğinde istenilen kayda dönülmeyi sağlayan bir sistemdir.

Bu bize ne fayda sağlar?

Basitçe bir proje üstünde uğraşırken, özellikle “yazılım” demiyorum zira sadece yazılıma özgü olduğunu düşünmüyorum, dosya veya dosyaları değiştirirken “aman veri kaybım olacak” demeden bu değişiklikleri yapmanızı sağlar. Bir de bu dosyaları github’a yüklediğinizde, yani cloud ortamına attığınızda, makinanıza meteor düşse, virüs girse bile sizin bu konudaki kaybınız minimal olur.

Git Kurulumu

Git açık kaynak bir yazılımdır ve https://www.git-scm.com’dan herhangi bir ücret ödemeden indirilebilir. Kurulum adımlarında herşeyi olduğu gibi bırakarak kurmanızı öneririm. Bu konuda bir zorluk yaşarsanız bana ulaşabilirsiniz; böyle bir istek gelirse ekran görüntüleri ile beraber anlatabilirim. O yüzden kurulumdan ziyade esas zorlanacağınızı düşündüğüm yer olan git kullanımına geçmek istiyorum.

Temel Git Kullanımı

Projeyi Gitlemek

Git’i kurduktan sonra projemizi gitlemek için şöyle yapıyoruz:

  • Projenin bulunduğu (veya bulunacağı) klasöre gelip sağ tıklayarak Git Bash Here diyoruz
  • Bu bize bir komut satırı penceresi açıyor:

Burada

git init

diyerek git’in versiyon kontrolü için kullandığı .git klasörünü ürettirmiş oluyoruz.

Proje değişikliklerini git üzerine kaydetmek

Dosyalarımızı git’e takip ettirme

Diyelim ki çalıştık çalıştık ve artık versiyon kontrolümüzde bu değişiklikleri saklamak istiyoruz. Bunu simüle etmek için git init dediğiniz klasörün içinde test.txt diye bir dosya üretiyoruz, klasörün içinde veya üzerine sağ tıklayarak Git Bash Here diyerek, git terminalini açıyoruz

Akabinde git’e hangi dosyaları takip edeceğini söylememiz lazım. Bu elde bir dosya varken kolay bir şey, ancak yüzlerce dosya olduğunda ne yapacağız? Sorun yok, git bize burada bir kısayol sunmakta:

git add . ## Bu komut tüm yeni dosyaları ekler
git add --all ## Yukarıdakinin aynısı
git add -u ## Bu komut ad değiştiren veya silinen dosyaları günceller, hiç kullanmadım.
git add -A ## Her ikisini de yapar

Ben genelde git add . diyerek işimi görüyorum.

Kaydetme (commit) aşaması

Bu noktada git status derseniz eklediğimiz dosyanın yeşil yeşil olduğunu göreceksiniz, bu git’çe “bunda bir değişiklik olmuş” demektir. Bunu kayıt edelim hadi:

git commit -ma "Kayıt mesajı"

Bu komut ile yaptığınız değişiklikler Kayıt mesajı açıklamasıyla git sistemine kaydolur. Bunun böyle olup olmadığını da:

git log

diyerek görebilirsiniz.

Projemizi branchlamak

Bunu nasıl anlatabilirim bilmiyorum o yüzden bir senaryo üstünden gidelim.

Diyelim ki bir şirkette yazılım geliştiren bir insansınız ve git kullanıyorsunuz. Yazılımınız geliştirilmiş, müşterinin kullanımına sunulmuş aktif bir yazılım. Doğal olarak geçen süreçte yazılım üzerinde değişiklikler yapıyor, bozuklukları temizliyor ve/veya yeni özellikler ekliyorsunuz. Patronunuz geliyor diyor ki:

Yazılıma takvim ekleyeceğiz.

Hayhay, yapalım. Şimdi, normal şartlar altında - yani git veya herhangi bir versiyon kontrol sistemi öncesinde - biz bunu nasıl yapıyorduk onu anlatayım.

  • En başta çalışan projenin klasörü bir yere kopyalanır. Zira proje ile alakalı bir sorun çıkarsa “ay dur takvim değişikliğini etkisiz hale getireyim, hatayı temizleyeyim” demek lüksünüz çoğu zaman olmaz.
  • Diyelim ki müşteri sizi şaşırtıcı biçimde rahat bıraktı, geliştirmenizi yaptınız. Şimdi o geliştirdiğiniz kısımları tek tek bulup, orjinal koda koymanız gerekiyor.
  • Veya olağan biçimde müşterinizden zırr diye telefon geldi, “sistem bozuk, açılmıyor” diyen bir kullanıcı ile karşılaştınız. Adamın/kadının derdini anlayıp hatanın nerede olduğunu buldunuz, güncellediniz. Takvim bittiği zaman sizin, bir önceki değişiklikleri bozmadan yeni özelliği sisteme eklemeniz gerekecek.

Zor değil mi? Ancak git ile bunlar tarihe karışan sorunlar. Git, branch denilen bir sistem kullanıyor. Branchlar kodun üstüne attığınız katmanlar gibi düşünülebilecek şeyler:

Git, kanonik olarak asıl ürünün olduğu branch’a master diyor. Yani yapılan değişiklikler canlı yayına alınacaksa master branchına geçirilmek zorunda. Ona da geleceğiz.

Yeni Branch Açmak

Git üzerinde yeni branch açmak tek satırlık bir komut:

git checkout -b branchAdi

Bu komut size branchAdi adında bir branch açarak o katmana geçiriyor. Resimde de görebileceğiniz üzere branchın adını komut satırında görebilirsiniz:

Burada yaptığınız değişiklikler bu katmana özel. Yani ben test.txt‘e gidip:

Merhaba Branch!

yazdığımda ve az sonra yapacağımız üzere master branchına geçtiğimizde böyle bir yazının olmadığını göreceğiz.

Branchlararası gezinme

Şimdi size en fazla karşılaşacağınız sorunlardan birisiyle tanıştırayım. Git üzerinde, yaptığınız değişikliği o branch’a kaydetmeden branch değiştiremezsiniz. Yani master branchına geçmek için kullandığımız:

git checkout branchAdi

kodu bize kızacak, “abi kaydedilmemiş dosyalar var” diyerek. Burada git commit -ma "mesaj" diyerek kayıt edebilir, git checkout . diyerek yaptığımız değişiklikleri kaybedebiliriz. Bazen bu da gerekiyor zira, branch değiştirme senaryosunda değil de şöyle düşünün, değişiklikleri yaptınız yaptınız öyle bir yere geldiniz ki proje kırıldı üstüne üstlük neyin kırdığını da bilmiyorsunuz. Atıyorsunuz bir git checkout . misler gibi en son kaydedilen yerden başlıyorsunuz. Diyelim ki en son commit’de hatalı, bir öncekine de dönebiliyorsunuz ama ona daha sonra değineceğim.

Dosyamızın üzerindeki değişikliği

git commit -ma "mesaj yazildi"

diyerek kayıt edelim. Akabinde de

git checkout master

diyerek master branchına geçelim ve tekrardan dosyamızı açalım. Tertemiz olduğunu göreceksiniz. Yine

git checkout branchAdi

diyerek değişikliği yaptığımız yere döndüğümüzde de dosyayı mutlu mutlu görüyor olacağız.

Github

Yazılacak

R

Yazılacak. İndirme adresi: https://www.r-project.org/

RStudio

Yazılacak. İndirme adresi: https://www.rstudio.com/

RTools

Yazılacak. İndirme adresi: https://cran.r-project.org/bin/windows/Rtools/

Not Bu arada R pakedinin kurulum sırası yazdığım şekilde olmalı, yani:

  • R
  • RStudio
  • RTools

şeklinde gitmelisiniz.