Bir gün stajyerlerden biri elini kolunu sallayarak yanıma geldi: “Abi bir şey oldu, üç günlük kodum kayboldu.” Terminal geçmişine baktık, yanlışlıkla bir klasörü silmiş. O gün fark ettim ki git kullanmayı bilmek değil, git’i gerçekten anlamak ayrı bir şey. Çünkü git sadece “commit at” diye ezberlenen bir komut listesi değil, elinizdeki her şeyi geri getirebilen bir zaman makinesi. Yıllardır saha projelerinde aynı hatayı tekrar tekrar görüyorum.

Bu yazıda git’in ne olduğunu, neden ortaya çıktığını ve kodunuzun aslında hangi dört alanda yaşadığını anlatacağım. Sonunda GitLab üzerinden basit bir örnekle init’ten push’a kadar tüm süreci birlikte kuracağız.

Git nedir, neden ihtiyacımız var?

Git, yazılım projelerindeki değişiklikleri takip eden dağıtık bir versiyon kontrol sistemi. Şöyle bir benzetme yapayım: git, kodunuzun hafızası gibi düşünülebilir. Attığınız her commit, bir video oyunundaki kayıt noktası gibi davranır. Kodu bozup “savaşı” kaybettiğinizde, en son kayıt noktasından devam edebilirsiniz. Tek fark şu: burada kurtardığınız oyun değil, gerçek bir proje.

Sahada gördüğüm gerçek şu: git’i sadece “kod yedekleme aracı” gibi görenler, asıl gücünü kaçırıyor. Git’in asıl değeri, birden fazla kişinin aynı projede çakışmadan çalışabilmesini sağlaması.

Git’in hikayesi: bir lisans krizinden doğdu

Git’in doğuşu 2005 yılına dayanıyor. O yıllarda Linux çekirdeğini geliştiren binlerce yazılımcı aynı proje üzerinde çalışıyordu, kullandıkları dağıtık sürüm kontrol sistemi BitKeeper’dı. Bir noktada BitKeeper ile lisans anlaşmazlığı yaşandı ve topluluk bu aracı kullanmaya devam edemedi.

Linus Torvalds bu duruma “o zaman kendimiz yazarız” diyerek yanıt verdi ve git’in ilk versiyonunu yaklaşık iki hafta gibi kısa bir sürede geliştirdi. Bugün milyonlarca yazılımcının kayıt noktaları, işte bu iki haftalık acil çözümün üzerine kurulu bir sistemde güvenle saklanıyor. Bunu her hatırladığımda “gerçekten mi bu kadar hızlı yazıldı” diye şaşırıyorum, ama kriz anında ortaya çıkan çözümler genelde böyle oluyor.

Git’in dağıtık yapısı ne işe yarıyor?

Git’in açık kaynak ve dağıtık olması, birkaç güçlü özelliği beraberinde getiriyor:

  • Commit, mevcut kodun anlık bir fotoğrafını çeker; o ana ait tam bir kayıt oluşturur.
  • Branch (dal) yaklaşımı, ana projeyi bozmadan yeni bir şey denemenize imkan sağlar; başarısız olursa ana projeye hiç dokunmamış olursunuz.
  • Merge ile başarılı denemelerinizi ana projeye geri katarsınız.
  • Distributed (dağıtık) yapısı sayesinde her yazılımcının bilgisayarında projenin tam bir kopyası bulunur; internet gitse bile proje geçmişine erişiminiz kesilmez.

Kodunuz aslında dört farklı alanda yaşıyor

Git’i anlamanın en pratik yolu, kodun hangi aşamalardan geçtiğini bilmek. Dört alan var:

Working Directory, Staging Area, Local Repository ve Remote Repository arasındaki git add, commit, push ve pull akışını gösteren şema

  1. Working directory: bilgisayarınıza kod yazdığınız alan. Henüz git bu değişikliklerden haberdar değil.
  2. Staging area: git add komutuyla, kaydetmek istediğiniz dosyaları topladığınız hazırlık alanı.
  3. Local repository: git commit komutuyla değişiklikler bilgisayarınızda kalıcı bir kayıt noktasına dönüşür. Bu aşamada kodlar hala yalnızca sizin bilgisayarınızda.
  4. Remote repository: git push ile kayıt noktalarınızı GitHub, GitLab gibi uzak sunuculara yüklersiniz; ekip arkadaşlarınızın erişebileceği yere koyarsınız.

İki pratik not: birincisi, staging area’nın varlığı sayesinde bir commit’e hangi dosyaların gireceğini siz seçersiniz, her şeyi topluca kaydetmek zorunda değilsiniz. İkincisi, push yapana kadar hiçbir şey ekibinizle paylaşılmıyor; yani yanlış bir commit attıysanız düzeltmek için hala vaktiniz var.

Uygulamalı: GitLab üzerinden ilk projenizi oluşturmak

Git’i denemek için önce GitLab gibi bir uzak depo sağlayıcısında yeni bir proje oluşturuyoruz. Karşınıza aşağıdaki gibi boş bir repo ekranı çıkacak; buradaki komut satırı talimatları da tam olarak biraz sonra anlatacağım adımların aynısı.

GitLab'da yeni oluşturulmuş boş bir repo ekranı ve komut satırı talimatları

Ardından VS Code üzerinden basit bir dosya oluşturup adım adım şu komutları çalıştırabilirsiniz:

git init
git remote add origin <uzak-depo-adresi>
git add .
git commit -m "ilk kayıt noktam"
git push -u origin main

git init komutuyla bilgisayarınızdaki klasörü, artık git tarafından takip edilen bir projeye dönüştürüyorsunuz. remote add ile bu projeyi GitLab’taki uzak depoya bağlıyorsunuz. add komutuyla değişiklikleri commit’e hazırlıyor, commit ile ilk kayıt noktanızı oluşturuyorsunuz; bu noktada kayıt hala yalnızca bilgisayarınızda. Son olarak push ile bu kayıt noktasını uzak depoya gönderiyorsunuz.

Bu kadar. Kodları artık WhatsApp’tan zip dosyası olarak göndermenize gerek yok, gerçekten bunu hala yapan varsa yorumlarda söylesin, çok merak ettim.

Toparlayalım

  • Git, kodun her aşamasını kayıt altına alan dağıtık bir versiyon kontrol sistemi; 2005’te bir lisans kriziyle doğdu.
  • Commit bir fotoğraf, branch bir deney alanı, merge o deneyi ana projeye taşıma işlemi.
  • Kodunuz working directory, staging area, local repository ve remote repository olmak üzere dört alanda ilerler.
  • init, add, commit, push: bir projeyi git’e bağlamak için gereken temel komutlar bundan ibaret.

Git’i bir kere doğru anladığınızda, “kodum kayboldu” korkusu tamamen ortadan kalkıyor. Sorularınız olursa yorumlarda buluşalım.

Yorum Bırakın