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.
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"
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/
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)
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
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
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
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"
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
git remote add origin https://github.com/merveozdes/test_push.git
git branch -M main
git push -u origin main
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