Git'e Giriş

Git 2005 yılında Linus Torvalds (aynı zamanda Linux kernelini yazan kişi) tarafından geliştirilen günümüzde oldukça popüler olan açık kaynaklı bir versiyon kontrol sistemidir. Projeniz karmaşıklaştıkça projenin belli bir durumunu kaydetme, yeni bir özellik test ederken projenin çalışır halini saklama, birden fazla kişi ile aynı projede çalışırken kimin ne değişiklik yaptığını takip etme gibi ihtiyaçlar doğacaktır. Git yazılımı, bu ihtiyaçlara cevap vermek için geliştirilmiştir.

İçindekiler


0. Git Ne işe Yarar?

  • Projenizi bir repo haline getirerek yönetebilmenizi sağlar.
  • Projenizin kopyasını oluşturmaya ve takım arkadaşlarınızla paylaşabilmeye yarar.
  • Projenizdeki her değişikliği rahatça takip edebilirsiniz.
  • Projenizde farklı versiyonlar oluşturabilir bu versiyonları gerektirdiğinde birleştirebilirsiniz.

1. Git Kurulumu

Git yazılımını çoğunlukla terminal aracılığıyla kullanırız, ancak bunun için Git’in bilgisayarımızda kurulu olması gerekli. Eğer Mac/Linux kullanıyorsanız yüksek ihtimalle Git yazılımı önceden yüklüdür. Kontrol etmek için terminalde şu komutu çalıştırabilirsiniz:

1
git --version

Eğer yukarıdaki komut ile git versiyonunu görüntüleyemiyorsanız veya Windows kullanıyosanız aşağıdaki linkten sisteminize uygun seçeneği seçerek Git kurulumunu gerçekleştirebilirsiniz: https://git-scm.com/downloads

Git kurulumunu tamamladıktan sonra kimliğinizi tanıtmak için aşağıdaki komutları çalıştırın:

1
2
git config --global user.name "Adınız"
git config --global user.email "email@adresiniz.com"

1.1 Git ve Github

Yeri gelmişken Git ve Github‘ın aynı şey olmadığını belirteyim. Git başta belirttiğim gibi 2005 yılında piyasaya sürülen açık kaynaklı bir versiyon kontrol sistemi iken, Github 2008 yılında kurulan ve Git repolarımızı barındırma hizmeti sunan bir şirkettir. Kısacası Git’i kullanmak için Github şart değilken, Github’ı Git olmadan kullanamayız.

2. Repo Kavramı

Repository(genellikle repo olarak kısaltılır) Git ile çalışırken aşina olmanız gereken önemli bir terimdir. Dilimize depo olarak çevirebiliriz. Projemizde git’i kullanabilmek için repo oluşturmak şarttır. 2 tür repo bulunmaktadır:

  • Local repository (Yerel depo): Adından da anlaşılabileceği gibi kendi bilgisayarımızda oluşturduğumuz repo çeşidine verilen addır. Projemizin yerel versiyonu ile çalışabiliriz.
  • Remote repository (Uzak depo): Kendi bilgisayarımızın dışında başka bir sunucuda sakladığımız repo türüdür. Örneğin Github üzerinde bir repo açarsak bu remote bir repo olur ve başkalarıyla kodumuzu paylaşabilir aynı projede üzerinde çalışabiliriz.

Bu yazı boyunca local repository’ler ile çalışacağız.

2.1 Repo Oluşturmak

Yeni bir yerel repo oluşturmak için projemizin bulunduğu dizinde iken aşağıdaki komutu çalıştırmamız yeterlidir:

1
git init

Bu komut projenizin ana dizininde .git adında gizli bir klasör oluşturacaktır. Git yazılımı projenizdeki tüm değişiklikleri bu klasör altında saklayacaktır.

3. Commit Kavramı

Git ile çalışırken projemizde geri dönmek isteyeceğimiz noktalar yaratmak için commitler oluştururuz. Commitleri bilgisayar oyunlarındaki checkpointlere benzetebiliriz. Git ile sınırsız sayıda commitler oluşturabilir ve bunlar arasında istediğiniz zaman geçiş yapabilirsiniz.

Genellikle projemizde anlamlı değişiklikler yaptığımızda ve bunları kaybetmek istemediğimizde commit işlemi yapmamız gerekir.

Şimdi git ile commit işlemi yapmaya başlayalım:

3.1 Git Projemizin durumunu kontrol etmek

Commitleme işlemine başlamadan önce repomuzu oluşturduğumuz klasöre herhangi bir dosya ekleyelim (Ben örnek olarak bir app.js dosyası ekledim.). Sonrasında Git ile çalışırken sıklıkla kullanılan ve git projemizin şu anki durumunu görmemizi sağlayan komutu girelim.

1
git status

Git status

git status komutunu her çalıştırdığınızda git reponuz hakkındaki önemli bilgileri bu şekilde alabiliriz.

Yukarıda görebileceğiniz gibi git status komutunu çalıştırdığımda:

main branchinde olduğumu (yazının devamında bu kavram üzerinde duracağım),

  • henüz bir commit almadığımı
  • ve son olarak 1 adet untracked(izlenmeyen) dosyamın olduğunu bildiriyor.

Git projenizde bir dosyanın untracked durumda olması, bu dosyanın git’e tanıtılmadığı ve bu dosyadaki hiçbir değişikliğin takip edilmeyeceği anlamına gelir.

Git’in takip etmesini istediğimiz dosyaları tanıtmak için bu dosyaları staging area denen bir yere eklememiz gerekir.

3.2 Dosyaları stage etmek

Staging area dediğimiz alanı aslında dosyalarımızı commitlenmeden önce sakladığımız yer olarak düşünebiliriz. Bir sonraki adımda öğreneceğimiz commit işleminin çalışması için dosyalarımızın bu aşamada olması şarttır aksi takdirde commit komutu commitlenecek bir şey yok diye uyarı verecektir.

Dosyaları stage aşamasına almak için git add komutunu kullanmamız gerekir. Bu komut ile eklediğimiz dosyalar artık git tarafından takip edilmeye başlanır ve üzerindeki değişiklikler hakkında bilgi sahibi olabiliriz.

Spesifik olarak bir dosyayı eklemek için bu komutu:

1
git add app.js

Birden fazla dosyayı eklemek için bu komutu:

1
git add app.js app2.js app3.js

Tek tek dosya isimleri ile uğraşmadan proje klasöründeki tüm dosya ve klasörleri eklemek içinse bu komutu kullanabiliriz:

1
git add .

Örnek projemde git add . komutunu kullandığımda hiçbir şey olmamış gibi gözükse de yukarıda öğrendiğimiz git status komutu ile projemin durumunu kontrol ettiğimde dosyamın staging area’ya eklendiğini teyit edebiliyorum:

git add

3.3 Commit işlemi

Dosyalarımızı git add komutuyla ekledikten sonra artık commit almaya (yani projemizin şu anki halini geri dönülebilir bir kayıt noktası haline getirmeye) hazırız.

Commit işlemini gerçekleştirmek için bu komutu kullanmamız yeterli:

1
git commit -m "Projemin ilk versiyonu"

Tırnak içlerine ekleyeceğimiz metin commit mesajı olacaktır. İleride çok sayıda commitimiz olduğunda buradaki mesajdan commitlerimizi ayırt etmemize yardımcı olur.

git commit

📌 Eğer yeni bir commit oluşturmak isterseniz dosyaları stage alanına ekleme ve commit komutuyla commit oluşturma aşamalarını tekrarlamanız gerekir. İstediğiniz aşamada git status komutunu kullanarak hangi dosyaların değiştirildiğini, stage alanına eklendiğini veya takip edilip edilmediğini görebilirsiniz.

3.4 Commit geçmişi

Projenizdeki tüm commitlerin listesini almak için bu komutu kullanabilirsiniz:

1
git log

git log Loglarda her commit için; commit sahibinin adı ve emaili,commitin tarih-saat bilgisi ve her commit için özgün olarak üretilen commit hashi görebiliriz.

Geçmişteki bir commit’e dönmek için tek yapmanız gereken ilgili commitin hashini kullanarak bu komutu girmektir:

1
git checkout commit-hashiniz

“commit-hashiniz” kısmını ilgili commitin hashi ile değistirdiğinizde projenizin o committeki haline geri dönmüş olursunuz.

Eğer projenizin en son haline geri dönmek isterseniz, bu komutu kullanabilirsiniz:

1
git checkout main

Eğer yukarıdaki komut çalışmaz ise (bunun sebebini Branch kavramında açıkladım) aşağıdaki komutu kullanabilirsiniz:

1
git checkout master

3.5 gitignore dosyası

Bazen projenizdeki bazı dosya ve klasörlerin git tarafından takip edilmesini isteyemebilirsiniz (örneğin gizli kalmasını isteyeceğiniz verilerinizin olduğu .env dosyaları gibi).

Bu durumda projenizin ana dizininde .gitignore dosyası oluşturmanız ve bu dosyada takip edilmesini istemediğiniz dosya ve klasörleri belirtmeniz gerekir. Örnek bir gitignore dosyası:

1
2
3
4
5
6
7
8
# Gitignore dosyasında yorum yazmak için "#" kullanırız.
# == Örnekler ==
# Tek bir dosyayı ignore etmek için:
/ozel-bilgiler.txt
# Bir dosya türündeki tüm dosyaları ignore etmek için:
*.png
# Bir klasörü ignore etmek için:
node_modules/

4. Branch kavramı

Farz edelim ki tek sayfadan oluşan bir portfolyo siteniz var, bu sitenin üst kısmına projelerinizi listelediğiniz bir resim galerisi eklemek istiyorsunuz ancak galeriyi tamamen bitirip görmeden sitenizin şu anki haline eklemek istemiyorsunuz tam da bu tarz durumlar için branchleri kullanabilirsiniz.

Branchler (dilimize yaprak olarak çevirebiliriz) projenizin farklı alt versiyonları gibidir. Yukarıdaki senaryoda kendinize “resimgalerisi” adında bir branch açıp burada resim galerisi özelliğini projenize ekleyip, test ettikten sonra isterseniz projenizin ana branchi ile merge (birleştirme) edebilirsiniz. Bu sayede emin olmadığınız özellikleri güvenli bir ortamda test etmiş olursunuz.

Git projelerinde ana branch için geleneksel olarak master kelimesi kullanılırdı. Ancak 2020 yılında master / slave terimleri çağrışımları sebebiyle incitici bulundu ve yıllardır varsayılan isim olan master yerini maine bıraktı. Bu sebeple artık yeni git repoları oluşturduğunuzda veya Github üzerinden bir repo oluşturduğunuzda ana reponuzun adı main olacaktır. Tabii bu tercihe bağlı isterseniz ana branchinizin adını dilediğiniz gibi değiştirebilirsiniz.

4.1 Branchleri listeleme

Projenizdeki branchleri görmek için bu komutu kullanabilirsiniz:

1
git branch

git branch Yukarıdaki örnekte herhangi bir branch açmadığım için yalnızca varsayılan branch olan maini görüyorum.

4.2 Branch oluşturma

Yeni bir branch oluşturmak için bu komutu kullanabilirsiniz:

1
git branch branch-adiniz

“branch-adiniz” kısmını istediğiniz branch adı ile değiştirdiğinizde ilgili isimde yeni bir branch oluşturulacaktır.

4.3 Branchler arası geçiş

Branchler arasında geçiş yapmak için git checkout komutunu kullanabilirsiniz:

1
git checkout branch-adiniz

Ana branche geri dönmek içinse bu komutu kullanabilirsiniz:

1
git checkout main

4.4 Merge işlemi

Yeni bir özelliği test edip geliştirdiğiniz bir branch olduğunu varsayalım. Artık bu yeni özelliği ana branchinize eklemek istiyorsanız git merge komutunu kullanmalısınız.

Ana branchte olduğunuzdan emin olduktan sonra (git status komutu ile kontrol edebilirsiniz), aşağıdaki komut ile branchleri birleştirebilirsiniz.

1
git merge birlestirmek-istediginiz-branch-adi

4.5 Branch silmek

Artık bir branche ihtiyacınız kalmadığında ilgili branchi silmek için git branch komutunu -d flagiyle çalıştırmanız yeterlidir:

1
git branch -d silmek-istenilen-branch-adi

Referanslar

🔗 Introduction to Git

🔗 Git and Github Tutorial for Beginners

🔗 Git Intro - W3C

comments powered by Disqus
Hugo ile oluşturuldu.
Stack teması Jimmy tarafından tasarlandı