Git Nedir? Git Kullanımı

Gökhan YAVAŞ
gokhanyavas
Published in
6 min readJan 7, 2017

Merhaba Arkadaşlar,

Bu yazımda git nedir, ne işe yarayıp, nasıl kullanıldığından bahsedeceğim. Öncelikle git nedir? Git, bir versiyon kontrol sistemidir. Bu sistem sayesinden projelerinizin versiyonlarına kolayca dönebilirsiniz. Git, yazılım geliştiriciler tarafından kullanılmaktadır. Git, Linux çekirdeğini yazan, Linus Torvalds tarafından oluşturulmuştur. Ücretsiz bir yazılımdır.

Git Kurulumu

Bu adresten sisteminize ait kurulum dosyasını indirin ve çalıştırın. Burada windows kullanıcıları yükleme işlemini yaparken Use Git from Git bash only seçeneğini seçmelidirler. Linux kullanıcıları kurulum işlemini yine aynı site üzerinden yapabilir veya terminal üzerinden gerçekleştirebilir. Terminal üzerinden kurulum için:

sudo apt-get install get

komutunu yazarak yapabilirler. Kurulum işleminin gerçekleştiğini teyit etmek için şu komutu kullanabilirsiniz:

git --version

Mac kullanıcıları yine ilgili siteden dmg dosyasını indirip kurulumu yapabilirler. Kurulum işlemini başarılı bir şekilde gerçekleştirdikten sonra git yapılandırmasını yapmamız gerekir yani kullanıcı adı ve email adresimizi kısacası hesabımızı tanıtmamız gerekmektedir. Büyük projelerde yapılan işlemlerin kime ait olduğunu tespit etmek açısından büyük önem taşır. Ben bu anlatımda bash kabuğu üzerinden anlatım yapacağımdan dolayı terminalimizi açalım:

git config --global user.name "Gökhan Yavaş"

Kendi adınızı girip enter tuşuna basın. Kodları açıklamak gerekirse, git uygulaması üzerinde işlem yaptığımızdan komutlarımız hep git ile başlar. config ise ayar demektir. global ise git sistemi üzerindeki bir kullanıcıdan bahseder. bu isime pek takılmayın. username ise bildiğiniz üzere kullanıcı ismidir. Yine aynı şekilde email adresimizi tanımlayalım:

git config --global user.email "yvsgkhn@gmail.com"

bu tanımladığımız değerleri görmek için aynı komutu parametre vermeden çalıştırmak gerekir.

Git Projesi Oluşturmak

Öncelikle bash terminali açalım. Proje oluşturma işlemine geçmeden kullandığımız komutlardan bahsedelim.

pwd: terminal üzerinde bulunduğumuz dizinin adresini vermektedir.

ls: listelemek anlamındadır. Bulunduğumuz dizin üzerindeki dosya ve dizinleri listelemek için kullanılır.

cd: açılımı change directory olan cd, ulaşılmak istenilen dizin için kullanılır. Bir önceki dizine ulaşmak için cd .. komutunu kullanırız.

clear: terminali temizlemek için kullanılır. Kısayolu CTRL — L ‘dir.

Şimdi, masaüstüne projem isminde bir klasör oluşturun ve ardından terminali açın. Yukarıda öğrenmiş olduğumuz komutlar yardımıyla oluşturduğumuz klasöre ulaşalım:

$ cd Desktop
$ cd projem

projem isimli klasöre ulaştıysanız bu klasörün bir git projesi olduğunu belirtmek için aşağıdaki komutu verip enter tuşuna basın:

git init

Bu komutu girdikten sonra projem isimli klasörümüz bir git projesi haline gelmiştir. Eğer bu klasörü açıp baktıysanız içinin boş olduğunu göreceksiniz. Aslında klasör boş değil, oluşan dosyalar gizli halde olduğundan gözükmemektedir. Oluşan bu dosyayı görmek isterseniz terminalden şu komutu vermek gerekir:

Gokhan-MacBook-Pro:projem gokhanyavas$ ls -a
. .. .DS_Store .git

.git isminde bir dosyanın var olduğunu görüyorsunuz :)

Projeyi Git Deposuna Eklemek

Git deposu, proje dosyalarınızın saklandığı, barındığı yerdir. Yukarıda bahsettiğimiz proje oluşturma işlemlerinin üzerine devam edeceğim ki kafanız karışmasın hemde laf salatası yapmamış olalım tekrar. Projem dosyası üzerinden devam ediyorum. Örnek olması açısından python dosyası oluşturup bunu depoya ekleyeceğim.

Gokhan-MacBook-Pro:~ gokhanyavas$ cd Desktop/projem
Gokhan-MacBook-Pro:projem gokhanyavas$ ls
main.py
Gokhan-MacBook-Pro:projem gokhanyavas$ git init
Reinitialized existing Git repository in /Users/gokhanyavas/Desktop/projem/.git/
Gokhan-MacBook-Pro:projem gokhanyavas$ git add .
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "ilk commit"
[master (root-commit) f331f6f] ilk commit
1 file changed, 1 insertion(+)
create mode 100644 main.py
Gokhan-MacBook-Pro:projem gokhanyavas$

Burada, git add . komutu eklemek anlam gelir, nokta ise şuanki dizin anlamına gelir. Bu komutu çalıştırmak tek başına işe yaramaz. Bu dosya şu anda staging area denilen geçiş bölgesinde tutulmaktadır. Bu dosyaları depoya ekmek içinse commit etmek gerekir. Commit işleminde 2 tırnak açarak alınan versiyonun niteliğini açıklayan ifade belirtilmeli. Alınan versiyonları listelenmek istersek aşağıdaki komutu kullanarız:

Gokhan-MacBook-Pro:projem gokhanyavas$ git log
commit f331f6f706deb655e48cca253a47016c5e5bafdb
Author: Gökhan Yavaş <yvsgkhn@gmail.com>
Date: Sat Jan 7 11:30:35 2017 +0300
ilk commit

Bu komut ile alınan versiyonun kim tarafından, hangi tarihte alındığını listelemiş olduk.
Git Status: Projenizde bir değişiklik olduğunda bu değişiklikleri gösterir.Gokhan-MacBook-Pro:projem gokhanyavas$ git status
On branch master
nothing to commit, working tree clean
git status, komutu verdiğimizde projem dizininde eklenecek bir dosyanın olmadığını belirtiyor. Dizimizin içine hakkında isminde bir dosya oluşturup ilgili komutu tekrar çalıştırıyorum:Gokhan-MacBook-Pro:projem gokhanyavas$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hakkinda.pynothing added to commit but untracked files present (use "git add" to track)
komutu tekrar çalıştırdığımda eklenmek üzere bekleyen bir dosyanın olduğunu belirtiyor...
Gokhan-MacBook-Pro:projem gokhanyavas$ git add hakkinda.py
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "hakkinda metodu"
[master a101322] hakkinda metodu
1 file changed, 1 insertion(+)
create mode 100644 hakkinda.py
yukarıda olduğu gibi depoya dosyayı ismiylede ekleyebiliriz. git log komutu ile alınan versiyonları görüntüleyebilirsiniz.

Değişiklikler

Dosyalarımız üzerinde değişiklik işlemleri yapılmış ise satır satır listelemek için kullanılan komut diff komutudur. Yukarıdaki anlatımlarda oluşturduğum hakkında.py dosyası içinde değişik yapalım.Gokhan-MacBook-Pro:projem gokhanyavas$ git diff
diff --git a/hakkinda.py b/hakkinda.py
index d991d47..e69de29 100644
--- a/hakkinda.py
+++ b/hakkinda.py
@@ -1 +0,0 @@
-print('git anlatımı')
\ No newline at end of file
ilgili komutu çalıştırdığımda yapılan değişiklikler kırmızı (-), ekleme yapıldıysa (+) yeşil renkte görüntülenir. Yapılan işlemlerin geçerli olması için her zamanki yaptığımız gibi commit işlemi yapmamız gerekir:Gokhan-MacBook-Pro:projem gokhanyavas$ git add .
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "degisiklik yapildi"
[master d59fa0b] degisiklik yapildi
1 file changed, 1 deletion(-)
Geçiş bölgesi ile git deposu arasındaki farklılıkları göstermek için şu komut kullanılır:git diff --staged

Dosya Silme

Git projesinde dosya silmek için 2 yöntem vardır. Birincisi elle silmek ikincisi ise git komutuyla silmek. Şimdi dizinden elle sildiğimiz dosyayı git ile bildirelim:Gokhan-MacBook-Pro:projem gokhanyavas$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: hakkinda.pyno changes added to commit (use "git add" and/or "git commit -a")
Gokhan-MacBook-Pro:projem gokhanyavas$ git rm hakkinda.py
rm 'hakkinda.py'
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "hakkinda dosyasi silindi"
[master 528b344] hakkinda dosyasi silindi
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 hakkinda.py
Gokhan-MacBook-Pro:projem gokhanyavas$
elle hakkında dosyasını sildikten sonra git status komutuyla yapılması gereken işlemi sorguladık. Ardından git rm dosyaadı komutuyla silinen dosyayı geçiş bölgesine gönderelim ve ardından commit işlemini gerçekleştirelim.
Şimdi git komutuyla silme işleminin nasıl olduğuna bakalım:Gokhan-MacBook-Pro:projem gokhanyavas$ git rm main.py
rm 'main.py'
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "main dosyasi silindi"
[master 66d7964] main dosyasi silindi
1 file changed, 1 deletion(-)
delete mode 100644 main.py
main dosyasını rm komutu ile sildik. Eğer bir klasörü silmek istersek şu komutu kullanırız:Gokhan-MacBook-Pro:projem gokhanyavas$ git rm -r sil/
rm 'sil/1.txt'
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "klasor ve icindekiler silindi"
[master d979727] klasor ve icindekiler silindi
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 sil/1.txt
Burada ekstra olarak -r komutu verdik. Bunun anlamı recursive özyinelemeli demektedir. Yaptığı şey ise klasörün içindekileri ardından klasörü silmektir.Dosya isimlendirme ve taşımaBir dosyanın isimini 2 şekilde değiştirebiliriz. Birincisi elle diğeri ise git komutuyla. Git komutuyla değiştirmek daha kolay olduğundan git komutuyla dosyanın isimini değiştirelim:Gokhan-MacBook-Pro:projem gokhanyavas$ git mv hakkinda.py main.py
Gokhan-MacBook-Pro:projem gokhanyavas$ git commit -m "dosya ismi degistirme"
[master a793011] dosya ismi degistirme
1 file changed, 0 insertions(+), 0 deletions(-)
rename hakkinda.py => main.py (100%)
hakkinda.py dosyasının adını main.py şeklinde değiştirmek istediğimizi belirttik. Burada mv komutu ile dosya adını değiştirebilir veya dosyayı taşıyabiliriz. Dosyayı klasöre taşımak için:git mv dosyadi klasoradi/şeklinde bir syntax kullanarak dosyayı istenilen klasöre taşıyabiliriz. Bu işlemi commitlemeyi unutmayın.

Değişiklikleri Geri Almak

Git projelerinde değişikleri 2 farklı şekilde geri alırız:
  1. Çalışma Dizininde Değişikliği Geri Alma
  2. Geçiş Bölgesinde Değişikliği Geri Alma
Sırasıyla inceleyelim:Çalışma dizininde yapılan bir değişikliği geri almak için şu komutları kullanırız:git checkout -- dosyaadıBu komut yardımıyla yanlışlıkla sildiğimiz dosyaları ve dosya içindeki değerleri geri getirebiliriz.Geçiş Bölgesindeki yapılan değişiklikleri geri almak için şu komutları kullanırız:git reset HEAD dosyaadicommit yapmadan önce yani geçiş bölgesindeki yaptığımız hatayı düzeltmek için dosyayı geri almak için ilgili komut kullanılır. Bu komut tek başına yeterli olmadığından işlemin tamamıyla gerçekleştirilmesi için şu komutuda çalıştırmamız gerekir.git checkout -- dosyaadıkomutunun ardından çalışma dizininde yaptığınız işlemin geçerli olup olmadığını kontrol edebilirsiniz.

Versiyon Değiştirmek

Git projesinde almış olduğumuz versiyonlara geri dönmek istediğimizde aşağıdaki şekilde bir komut yazarız:git checkout 95a6e33d877afbfe6e43419996cda613bdd4936a -- .buradaki girmiş olduğunuz uzun sayıya bir kimlik belirtmektedir. Bu kimliğe git log komutu ile ulaşırız. Komutun sonundaki nokta ise o versiyona ait tüm dosyaları geri almak istediğimizi belirtir. Eğer belirli bir dosyayı geri almak istersek nokta yerine o dosyanın isimini yazmamız gerekir. Bu komutu çalıştırdığımızda işlemlerin geçerli olması için commit etmek gerektiğini unutmayın. Özetle git konusu bu kadar basit.

--

--