Git kullanmaya başladığınızda her şey çok basit görünür. Bir dosya oluşturduk, kodlarımızı yazdık ve kaydettik. Ancak Git dünyasında "kaydet" tuşuna basmak kodumuzu versiyonlamak (commit) için yeterli değildir. Çünkü Git sistemi onları direk sürüm altına almak yerine Staging Area denilen bir tür "bekleme odasına" alır.

Staging Area Gerçekten Gerekli Mi?

Eğer daha önce Git ile çalışmadıysanız bu durum size farklı gelebilir. Git'in güçlü yönlerinden biridir ve gerçekten gerekip gerekmediğini anlamak için Git üç katmanlı algoritmasına bakıp mantığına odaklanalım.

Git'in Üç Katmanlı Yapısı

Git'in Üç Katmanlı Yapısı
  1. Working Directory (Çalışma Dizini): Kodlarımızı yazdığımız, bozduğumuz ve sildiğimiz yerdir. Yani proje dosyalarımız. Burada yapılanlar Git için henüz "kayıt altında" değildir. git status çalıştırdığımızda modified veya untracked olarak görünürler.
  2. "Çalışma dizinindeki (Working Directory) dosyalar git status yazıldığında genelde kırmızı renkte görünürken, Staging Area'ya (Hazırlık Alanı) alınan dosyalar yeşil renkte görünür."
  3. Staging Area (Hazırlık Alanı): Yazıp, bozup ve sildiğimiz kodlarımızı bir sonraki commit işlemine dahil etmek için bu alana aktarmalıyız. İstediğimiz dosyaları hatta sadece satırları seçip aktardığımız tampon bölgedir.
    Git'in güçlü yanlarından biridir çünkü tüm değişikliği birden sürümlemek (commit) yerine şunlar şunlar gitsin diyebiliriz. Buraya aktarılan dosyalar fiziksel olarak .git/index dosyası içinde tutulur.
  4. Biliyor muydunuz? Staging Area aslında Git'in arka planında .git klasörü içinde yer alan index isimli küçük bir dosyadır.
  5. Repository ya da kısaca Repo: git commit komutuyla Staging Area'daki değişikliklerin kalıcı olarak kaydedildiği ve tüm tarihçenin tutulduğu yerdir. Projenin kök dizinindeki .git/ klasörü içinde saklanır. Her commit, o anki dosyaların tam bir anlık görüntüsüdür (snapshot) — sadece değişen satırlar değil, projenin o andaki tüm hali. Bu sayede istediğiniz herhangi bir noktaya geri dönebilirsiniz.

Staging Area'nın Özellikleri

  • Kısmi commit özelliği: Bir dosyanın tamamı yerine sadece bir kısmını (git add -p ile) seçip commit'leyebiliriz. Hatta bu dosya üzerinde yeni değişiklikler yaptıysak bile commit'e (yeni sürüme) dahil etmeden kullanabiliriz.
  • Gözden geçirme şansı: Yeni bir sürüme çıkmadan önce git diff --staged komutu ile sadece Staging Area'ya aldığımız kodları son bir kez inceleyebilir, yanlış bir dosyası eklediysek çıkartabiliriz (git restore --staged <dosya>).
  • Temiz bir tarihçe: Değişikliğimizi mantıklı commitler halinde gruplamamızı sağlar. Projemizin geçmişinin düzenli ve anlaşılır kalmasını sağlar.

Git kullanmak sadece kodlarınızı yedeklemekle kalmaz ek olarak projemizin geliştirme hikayesini düzenli ve anlaşılır bir şekilde anlatır. Staging Area ile bu hikayenin her bir bölümünü (commit) rastgele değil planlayarak oluşturabiliriz.