Git bir versiyonlama sistemidir. Daha genel bir ifadeyle projenin zaman içindeki tüm değişimlerini kaydeden bir zaman makinesi gibidir.
Git sistemini sadece yeni veriyi "kaydetme" aracı olarak değil dosyaları yönetmek için tasarlanmış veritabanı olarak düşünebilirsiniz.
Belki şu an, "Ben kendi başıma çalışıyorum, Ctrl+S (Kaydet) tuşu ve kopyala-yapıştır bana yetiyor" diye düşünüyor olabilirsiniz. Ama masaüstünüzde "proje_son", "proje_son_v2", "proje_gercekten_bitti_valla" gibi klasörler birikmeye başladığında o kaosun içinden git ile çıkabilirsiniz.
Açık kaynaklı olan uygulama ile işbirliği ile çalışmanıza, sürümler arasında dolaşmanıza, çalışmanızı kaybetme korkusu olmadan versiyonlama yapar.
Bunu yaparken sistemin anlık bir fotoğrafını (snapshot) alır. Buna git evreninde commit denir ve sadece değişen dosyalarla çalıştığından çok hızlı ve hafiftir.
Dağıtık (Distributed) yapı nedir?
Bir projeyi bilgisayarımıza indirdiğimizde (git clone) aslında onun en son halini indirmeyiz. Geçmişini de indirmiş oluyoruz. Hatta herhangi bir snapshot anına dönmek de mümkündür. Yanlışlıkla bir şeyi sildiğimizde "Geri Al" yapmanın versiyon düzeyindeki hali gibidir.
Dallanma (Branching) nedir?
Gitin takım halinde çalışırken işleri en çok kolaylaştıran özelliklerinden biridir. Projenin son hali genelde main veya master olarak adlandırılır ve tüm branch'lerin toplandığı yerdir. Sunucumuzda bu main branch'indeki kodların çalıştığını düşünün. O son kararlı sürüme dokunmadan dağıtık yapı sayesinde kendi bilgisayarımıza bir kopya (branch) açarak (internete ihtiyacımız yok) son sürüme dokunmadan (ve bozmaktan korkmadan) çalışabiliriz.
Son sürüme dokunma o anki versiyonun bir kopyasını kendi bilgisayarıma kopyalamak istiyorum demiş oluyoruz.
Merge Nedir?
Peki bu dal ne işime yarayacak? Kodu kırıp döktüm ama en sonunda yaptım ve test bile ettim, çalışıyor. Burada gitin merge mekanizması devreye giriyor. Git merge algoritması kodu inceler ve bizim dalımızla "main" branchini birleştirir. Merak etmeyin kodunuzda bir sorun çıkarsa anında geri alabileceksiniz.
Git vs. GitHub aynı şeyler değildir. İşte farkı:
- Git: Bilgisayarına kurduğun o yazılımdır (Motor).
- GitHub/GitLab: Git projelerini internet üzerinde sakladığın, başkalarıyla paylaştığın bir depolama servisidir.