4.Gün: Değişiklikleri Kaydetme
Bu bölümde bilgisayarınızda oluşturduğunuz yerel bir deponun veya uzaktaki bir deponun bilgisayarınızdaki kopyasında yapacağınız değişiklikleri nasıl versiyon kontrolü altına alacağımız ile ilgili bilgilerimizi tazeleyip alıştırmalar yapacağız.
Projenizi ister yerel bir depoda olsun isterseniz uzak bir depodan klonlamış olsun tüm değişiklikleriniz yerel diskinizde gerçekleşecek ve commitleriniz ile oluşturacağınız tüm versiyonlar git tarafından yerel diskinizdeki .git klasöründeki Git veri tabanında kayıt altına alınıp takip edilecektir. git push komutunu çalıştırmadığınız sürece yaptığınız değişiklikler sadece yerel diskinizde kayıt altına alınır.
Dosya Durumları
Git'de dosyalarınız genel olarak iki durumda olabilir
Takip Edilmeyen (Untracked), bu durumdaki dosyalar versiyon kontrolü altında olmayan veya sizin henüz versiyon kontrolü yapmak için Git'e eklemediğiniz dosyalardır. Bu dosyalardaki değişiklikler siz dosyaları Git'e eklemediğiniz sürece versiyon kontrolüne tabi değildir
Takip Altında (Tracked), bu durumdaki dosyalar ise Git'in versiyon kontrolü takibi altında olan dosyalardır. Bu dosyalar üzerinde yapacağınız tüm değişiklikler git tarafından takip edilmektedir.
Staging Area
Çoğu versiyon kontrol sisteminde değişiklikleriniz iki yerde kaydedilir
- Yerel diskinizdeki çalışma klasörünüz (working copy) veya
- Versiyon kontrol sisteminin veri tabanı
Ancak Git'de değişikliklerinizin kayıt altına alındığı üçüncü bir alan daha vardır ki buna Staging Area denir ve Git'in en temel kavramlarından birisidir. Staging Area'yı, proje dosyalarımızdaki bir dizi değişikliği yeni bir versiyon olarak mühürlemeden önce kayıt altında tuttuğunuz veri tabanı olarak tanımlayabiliriz.
git add
Git ile versiyon kontrolü altına aldığınız projenize dosya eklediğinizde, dosya sildiğinizde veya var olan bir dosyanın içeriğini değiştirdiğinizde bu değişiklikler Git tarafından otomatik olarak takip edilmez. Git'in bu dosyaları takip etmesi için git add komutu ile bu dosyaları önce Git’e tanıtmanız gerekir.
Alıştırma - 1
Uzak deponuzdan bilgisayarınıza klonladığınız proje deponuzun src klasörü altındaki gun_04_01.txt isimli bir dosya ekleyip bu dosyanın içine adınızı ve soyadınızı yazın ve komut satırı ara yüzünden aşağıdaki komutları çalıştırın
# Proje klasörünüze konumlanın
cd <proje_kök_klasörü_yolu>
git status
Soru: git status
komutunun sonucunda yeni eklediğiniz dosya yukarıda bahsedilen iki durumdan hangisindedir?
Alıştırma - 2
Uzak deponuzdan bilgisayarınıza klonladığınız proje deponuzun kök klasörü altında gun_04_02 isimli yeni bir klasör oluşturun ve aşağıdaki komutları komut satırı ara yüzünde çalıştırın
cd <proje_klasörü>
git add -A .
git status
Soru: git status
komutunun sonucunda yeni eklediğiniz klasör tracked bir klasör haline geldi mi?
Soru: Boş klasörü tracked hale getirmek için nasıl bir yöntem izlemelisiniz?
Alıştırma - 3
git help add
komutu çalıştırarak add komutuna aşağıdaki işlemleri desteklemek için hangi parametrelerin geçilebileceğini araştırıp her bir durum için git add komutunu çalıştırın.
- gun_04_03 isimli klasörün altındaki tüm txt uzantılı dosyalar
- gun_04_03 isimli klasörün altındaki tüm dosyalar
- Proje klasörünüze eklenen tüm dosyalar
- gun_04_03.txt isimli tek bir metin dosya
git checkout
Checkout komutu birden fazla amaçla kullanılabilen komutlardan birisidir. Bunlar
- Bir dosyadaki değişiklikleri iptal etmek
- Çalışma kopyanızdaki (Working Copy) değişiklikleri kaybetmeden projenizin herhangi bir commit'ini incelemek
- Farklı bir dalı çalışma kopyanız olarak aktif hale getirmek
Bu bölümde bu komutun kullanımlarından birincisi ile ilgileniyoruz. Checkout komutu ile değiştirdiğimiz ancak henüz git add ile Staging Area'ya eklemediğimiz dosyalardaki değişiklikleri aşağıdaki komut şablonunun kullanarak iptal edebiliriz.
git checkout <dosya_yolu_ve_dosya_adı>
Alıştırma - 1
Bu alıştırmayı yapmak için öncelikle proje kök klasörü altındaki src klasörüne txt uzantılı metin bir dosya ekleyip dosyayı commit etmeniz gerekiyor. Bu işlemi aşağıdaki komutlar ile hızlıca yapabilirsiniz.
# Proje klasörünüze konumlanın
cd <proje_kök_klasörü_yolu>
touch <dosya_adı_1>.txt
git add -A .
git commit -m “4. gün, ikinci bölüm 1. Alıştırma hazırlığı”
Dosyanızı commit ettikten sonra komut satırı ara yüzünde aşağıdaki komutları çalıştırın
# Proje klasörünüze konumlanın
cd <proje_kök_klasörü_yolu>
# <dosya_adı>.txt dosyasının içeriğini değiştirdikten sonra aşağıdaki komutları çalıştırın
git status
git checkout <dosya_adı_1>.txt
Alıştırma - 2
# Proje klasörünüze konumlanın
cd <proje_kök_klasörü_yolu>
# <dosya_adı_2>.txt isimli yeni bir dosya ekleyin ve içine adınızı soyadınızı yazın
git status
git checkout <dosya_adı_2>.txt
Soru: Aldığınız hatayı nasıl yorumlamamız lazım.
Alıştırma - 3
# önceki alıştırmada eklediğiniz <dosya_adı_2>.txt dosyasını git add ile Staging Area'ya ekleyin
# dosyanın içeriğini değiştirin ve kaydedin
$ git checkout <dosya_adı_2>.txt
Soru: git checkout işlemi sonrasında
git reset
Reset komut ile Staging Area'ya git add ile eklediğimiz ve Git tarafından takip edilen (tracked) dosyaları Staging Area'dan çıkarabiliriz. Komut şu şablonu şöyle
git reset HEAD <dosya_adı>
Komut şablonundaki
Komut şablonundaki HEAD parametre değeri verilmeden de komutu çalıştırabilirsiniz. Bu durumda reset işlemi dosyanızı son commit’de olduğu haline geri getirir.
Alıştırma
# Proje klasörünüze konumlanın
cd <proje_kök_klasörü_yolu>
# Daha önceki alıştırmalarda eklediğiniz ve commit ettiğiniz herhangi bir dosyanın içeriğini değiştirin
git status
# dosyanız henüz track edilmiyor
# Değiştirdiğiniz txt uzantılı tüm dosyaları Staging Area’ya ekleyin
git add *.txt
git status
# dosyalarınız tracked hale geldi
git reset HEAD <dosya_adı>.txt
git status
# <dosya_adı>.txt isimli dosyanız tekrar untracked halde
Soru-1: Dosyanızda yaptığınız değişiklik kayboldu mu?
Soru-2: Dosyanızı değişiklik yapılmadan önceki hale getirmek için hangi komutu kullanmanız lazım? (İPUCU: Son durumda dosyanız untracked durumda yani Staging Area'da değil)