Versiyon Kontrol Sistemi: Git

Versiyon Kontrol Sistemi: Git

Günümüzde yazılımcıların vazgeçilmezi olan sürüm kontrol ve kaynak kod yönetim sistemi olan Git’i inceleyeceğiz.
Merve Özdeş08 Ağu 2022

Sürüm kontrolü ve kaynak kod yönetim sistemi olan Git günümüzde yazılımcıların vazgeçilmez araçlarından biridir. Peki dosyaların hem çalışma alanında hem de depo olarak kullanılan uzak sunucularda saklandığı Git nedir ve ne için kullanılır?

Bir proje hazırladığınızı ancak proje raporunu hazırladıktan sonra projeye yeni bir özellik eklediğinizi düşünün. Yapılan bu eklentiyi raporunuzun ilk halinin üstüne mi eklersiniz yoksa raporunuzun ilk halini kaydedip yeni bir dosya açıp, eklemeyi bu dosya üzerinde mi yaparsınız? Projenin her bir sürümünü farklı şekilde kaydetmek en akıllıca yöntem olacaktır. Bu, geçmiş sürümlere erişmek istediğinizde geçmişte oluşturduğunuz tüm sürümlere erişebilmenize olanak sağlayacak ve her bir sürümü ayrıca kaydettiğiniz için çalışmanız daha güvenli halde olacaktır. Ancak her bir güncellemenin yeni bir dosya oluşturması bir süre sonra kaosa neden olabilecek, özellikle büyük boyutlu projelerde iş takibi daha uzun ve karmaşık hale gelebilecektir. İşte Git tam olarak bu noktada devreye girmektedir. Git sayesinde yapılan tüm değişiklikler kendi deposunda saklanır ve istenildiğinde kolayca erişilip tüm sürümler yönetilebilir. Git’in en önemli avantajlarından biri sürümleri yönetmeye imkan sağlamasıdır. 

Tüm bu sürüm yönetme işlemini Git ile kolayca gerçekleştirebilmekteyiz. Git kendi deposunda tüm değişiklikleri saklar ve istenildiğinde eski sürümlere erişimi ve bu sürümleri yönetebilmeyi kolaylaştırır. 

Diyelim ki bilgisayarınızda sakladığınız proje raporu için oluşturduğunuz belgeleri, bilgisayarınızda oluşan bir problem nedeniyle kaybettiniz. Böyle bir kayıp yaşamamak için dosyalarınızı harici diskte, usb bellekte veya bir bulut ortamında ayrıca yedeklemeniz gerekmektedir. Git dünyasında da bu gibi sorunları ortadan kaldırmak için uzak depo anlamında kullanılan “remote repo” dediğimiz Github ve Gitlab gibi farklı bulut tabanlı servisler mevcuttur. Bu servisler kodlarımızı kaybolma/silinme riskine karşı güvence altına alır.

Git ayrıca, birden çok kişinin yaptığı değişikliklerin tek bir kaynakta birleştirilmesine izin vererek işbirliğini de kolaylaştırmaktadır. Bu nedenle ister yalnızca sizin göreceğiniz bir kod yazın, ister bir ekibin parçası olarak çalışın, Git proje çalışmalarınızda kullanacağınız en önemli araçlardan biri olacaktır.

Git yerel olarak çalışan bir yazılımdır yani dosyalarınız çalıştığınız bilgisayarda saklanır. Dosyalarınızın bir kopyasını ve revizyon geçmişlerini saklamak için Github ve BitBucket gibi servisler yardımcı olacaktır. Değişikliklerinizi karşıya yükleyebileceğiniz ve başkaları tarafından yapılan değişiklikleri indirebileceğiniz merkezi bir konuma sahip olmak, diğer geliştiricilerle daha kolay işbirliği yapmanızı sağlar. Git değişiklikleri otomatik olarak birleştirebilir, böylece iki kişi aynı dosyanın farklı kısımları üzerinde çalışabilir ve daha sonra bu değişiklikleri birbirlerinin işini kaybetmeden birleştirebilir. 

 

Temel Git Komutları

Git’i indirdikten sonra bazı global bilgileri Git sistemine tanıtmanız gerekmektedir. Bu global bilgiler, kullanıcı adınız ve email’inizdir. Bu bilgiler Git sisteminde değişikliklerin kim tarafından yapıldığının belli olmasını sağlamaktadır. Aşağıdaki komutları uç birime girerek kimliğinizi Git sistemine tanıtabilirsiniz.

 

git config --global user.name "kullanici-adi"
git config --global user.email "eposta-adresi"

 

  • “git init” proje oluşturmak için kullanılır. Bu komutu kullandığınızda bulunduğunuz dizin bir Git repository‘si haline gelir ve .git adında bir dizin oluşturulur. Daha sonra isterseniz bu repository‘yi uzaktaki bir sunucuya gönderebilirsiniz. Aşağıdaki komutları girdiğinizde git_project isimli bir klasör oluşur ve cd komutu ile o klasöre geçip git init komutunu girdiğinizde git_project dizininde boş bir Git repository’si oluşturulmuş olur. Yaptığımız değişiklikler .git dizininde tutulur. 


 

C:\Users\Merve>mkdir git_project
C:\Users\Merve>cd git_project/
C:\Users\Merve\git_project>git init
Initialized empty Git repository in C:/Users/Merve/git_project/.git/


 

  • “git status” üzerinde çalışılan projenin o anki durumunun öğrenilmesini sağlar. Komut yardımı ile eklenen ve silinen dosyaları görebilirsiniz. Aşağıda touch komutu ile hello.sh adında bir dosya oluşturulmuş ve dosyanın durumu “git status”  komutu ile listelenmiştir.. “On branch master” master dalında olduğumuzu, “No commits yet” klasörde herhangi bir değişiklik yapılmadığından versiyonlama yapılmadığını, “Untracked files” dosyanın sistemde henüz bir izi olmadığını yani henüz sistemde kayıtlı olmadığını ifade etmektedir. 

 

C:\Users\Merve\git_project>touch hello.sh
C:\Users\Merve\git_project>git status
On branch master
No commits yet
Untracked files:
  (use "git add ..." to include in what will be committed)
        hello.sh
nothing added to commit but untracked files present (use "git add" to track)

 

  • Yukarıda oluşturduğumuz hello.sh dosyasının durumu untracked olarak listelenmiştir. Git sisteminde dosyaların durumları aşağıdaki şekilde belirtildiği gibi, yapılan işlemlere göre değişiklik göstermektedir. Working Directory bulunduğunuz dizini ifade etmektedir. “add” komutu ile dosya Staging Area’ya geçer yani git dosyalardaki değişiklikleri izlemeye başlar. “.git” dizinimizin içindeki her şey Local Repository’de tutulur. 

Görsel Kaynağı

 

Aşağıda “git add” komutu ile hello.sh dosyası Stage Area’ya taşınmış ve dosyanın durumuna yeniden bakılmıştır. Yazdırılan mesajdan da görüldüğü üzere artık Git sistemi hello.sh isimli dosyamızı tanımıştır. 

 

C:\Users\Merve\git_project>git add hello.sh
C:\Users\Merve\git_project>git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached ..." to unstage)
        new file:   hello.sh

 

  • Working Directory’de bulunan tüm dosyaların Staging Area’ya taşınması istendiğinde “git add .” komutunu kullanılır. Bir örnek ile gösterecek olursak:

 

C:\Users\Merve\git_project>touch second_file
C:\Users\Merve\git_project>git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached ..." to unstage)
        new file:   hello.sh
Untracked files:
  (use "git add ..." to include in what will be committed)
        second_file
C:\Users\Merve\git_project>git add .
C:\Users\Merve\git_project>git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached ..." to unstage)
        new file:   hello.sh
        new file:   second_file

 

  • Dosyayı Staging Area’dan Local Repository’e geçirmek için “git commit” komutu kullanılır. Tüm commit’lerimiz Local Repository’de tutulur. Commit işleminden sonra Staging Area boş kalır. En alttaki “nothing to commit, working tree clean” mesajı ile Staging Area’nın boş olduğunu ve commit işlemi yapılacak dosyanın bulunmadığı anlaşılır.

 

C:\Users\Merve\git_project>git commit -m "hello.sh ve second_file olusturuldu"
[master (root-commit) a29d549] hello.sh ve second_file olusturuldu
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.sh
 create mode 100644 second_file
C:\Users\Merve\git_project>git status
On branch master
nothing to commit, working tree clean

 

  • git log” ve “git show” komutları ile Local Repository’de bulunanlar görüntülenebilir. Working Directory, Staging Area ve Local Repository sizin bilgisayarınızdadır, ancak Remote Repository sunucu üzerindedir.
  • “git checkout” komutu ile yapılan değişiklikler geri alınabilir. Örneğin, aşağıda echo komutu ile second_file dosyasına “second_line” satırı eklenmiş ve “git checkout -- second_file” komutu ile yapılan işlem geri alınmıştır. “cat” komutu dosyanın içeriğini bastırır.

 

C:\Users\Merve\git_project>echo "second_line" >> second_file
C:\Users\Merve\git_project>cat second_file
"first_line"
"second_line"
C:\Users\Merve\git_project>git checkout -- second_file
C:\Users\Merve\git_project>cat second_file
"first_line"

 

  • “log” komutu ile yapılan commitlerin görülebileceğini bir örnek ile gösterelim:

 

C:\Users\Merve\git_project>git log
commit 638a34c065c89bac51abb747ed016823d1882169 (HEAD -> master)
Author: merve
Date:   Sat Jul 2 15:24:26 2022 +0300
    second_file degistirildi

 
commit a29d549362e86eab0c100bb13deb53f3acc061cc
Author: merve
Date:   Sat Jul 2 15:07:06 2022 +0300
    hello.sh ve second_file oluşturuldu

 

  • Local Repository’de bulunan dosyaları uzak sunucudaki repository‘ye göndermek için öncelikle Github hesabınıza giriş yaparak yeni bir repository oluşturmanız gerekmektedir. Oluşturduğunuz repository sayfasında kullanmanız gereken komutlar verilecektir. Örneğin test_push isminde bir repository oluşturduğumuzu ve aşağıdaki komutları kullanarak Local Repository’de bulunan dosyalarımızın kişisel Github reponuza gönderebilirsiniz. Siz de oluşturduğunuz reponun linkini kullanarak bu işlemi gerçekleştirebilirsiniz.

 

git remote add origin https://github.com/merveozdes/test_push.git
git branch -M main
git push -u origin main

 

 

  • Sayfanızı yenilediğiniz zaman push ettiğiniz dosyaları  görebilirsiniz.

 

 

  • Pull komutu ile de Github reposundaki dosyaları kendi local reponuza çekebilirsiniz.

 

C:\Users\Merve\git_project>git pull origin main
From https://github.com/merveozdes/test_push
 * branch            main       -> FETCH_HEAD
Already up to date.

 

Bu yazıda Git’in ne için kullanıldığını Git’in çalışma mantığını en temel hatlarıyla anlatmaya çalıştım. Kısaca kullandığımız komutları ve sonuçlarını aşağıdaki görselle de özetleyebiliriz. Git’in sağladığı hız, eş zamanlı olarak çalışabilme ve sürümleri kolay bir şekilde yönetme gibi imkânlardan faydalanmak için Git’i bu linkten kolayca bilgisayarınıza indirip kullanmaya başlayabilirsiniz. 

 

Kaynaklar

İlginizi Çekebilir
Miuul topluluğunun bir parçası ol!

Abone ol butonuna tıklayarak Miuul'dan pazarlama ve haber içerikleri almayı onaylıyorum.