Git'e Giriş
29 Temmuz 2022Git 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.
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:
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.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:
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 commit
ler 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.
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:
Birden fazla dosyayı eklemek için bu komutu:
Tek tek dosya isimleri ile uğraşmadan proje klasöründeki tüm dosya ve klasörleri eklemek içinse bu komutu kullanabiliriz:
Ö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:
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:
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.
📌 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:
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:
"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:
Eğer yukarıdaki komut çalışmaz ise (bunun sebebini Branch kavramında açıkladım) aşağıdaki komutu kullanabilirsiniz:
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ı:
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:
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:
"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:
Ana branche geri dönmek içinse bu komutu kullanabilirsiniz:
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.
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: