Kısaca Git Nedir?

Göksel DOĞAN
5 min readJun 19, 2022

--

Merhabalar arkadaşlar bugün sizlere Git ve Github platformlarından bahsedeceğim. Sektörde bu iki kavram özellikle yeni başlayan kişiler tarafından oldukça karıştırılmakla beraber, çoğu zaman aynı şey sanılmaktadır. Hem bu konuya açıklık getirmeyi hedefliyorum hem de git nasıl çalışır bundan bahsetmek istiyorum.

İlk olarak Git nedir hiç bilmeyen birisi için şunu hayal etmenizi istiyorum. Hikaye tabanlı, zor bir oyun oynadığınızı ve görevler yaparak oyunda ilerlediğinizi düşünün. Herhangi bir noktada öldüğünüzde oyuna sıfırdan başlamak çok zahmetli olurdu değil mi? Tam bu noktada bir çok oyunda auto-save olarak bildiğimiz ve bizimde farklı noktalarda kayıt alabildiğimiz bir kontrol sistemi devreye giriyor. Süreci oyuncu açısından oldukça avantajlı bir hale getiriyor.

Oyun örneği biraz sanal gibi olsa da bir örnekte gerçek hayattan vermek istiyorum. Aslında bu durum sadece sanal platformlar için geçerli bir durum değil. Bir yazar olduğunuzu ve kitap yazdığınızı düşünün. Kitap yazma süreci senelerce süren uzun soluklu bir proje ve bir kontrol noktası olmadığını hayal ettiğimizde aslında sürekli sıfırdan başlama durumu mevcut. Buradan da anlaşılacağı gibi, versiyon sistemlerini de sadece yazılımlar ile ilişkilendirmemek daha sağlıklı olacaktır.

Peki biz bu süreci yazılımda hayal edersek, aslında auto-save ya da manuel save olarak bahsettiğim süreci yazılım süreçlerinde, git versiyon kontrol adını verdiğimiz yapı sağlıyor. Git sistemini aktif olarak kullandığımızda projede kaldığımız bir noktaya geri dönüş yapabiliyoruz.

Mantığı biraz kafamızda belirmeye başladıysa ilk olarak neden bu sisteme ihtiyaç duyulabileceği konusunda siz de benimle aynı fikirdesinizdir diye düşünüyorum. Sürece daha hakim olmak ve kontrolün elimizde olması; bize sağladığı avantajlardandır. Düşünsenize saatler çalışmışsınız ve ertesi gün geldiğinde neredeyse baştan başlamak zorundasınız! Bu çok can sıkıcı bir durum olurdu.

Diğer bir avantaj olarak sayılabilecek durum ise çoklu geliştirme ortamıdır. Buna gerçek hayattan bir örnek vermek istiyorum. Bir proje üzerinde on kişi çalışıyorsunuz ve bunun yazıya dökülmesi gerekli. Projemiz yirmi farklı bölüm içersin ve görev paylaşımıyla yazılacağını varsayalım. Herkes kendi iki bölümünü ayrı olarak hazırlar ve en son bu bölümler birlikte düzenlenir. Peki şöyle bir durum olsa nasıl olurdu? Herkes aynı dosya üzerinde proje geliştirebiliyor ve diğerleri bu durumdan etkilenmiyor. Google ve birçok sistem her ne kadar bu desteği sunsa da birçok insan için bu süreç karmaşıktır.

Başka bir durum ise aslında çoğu yazılım geliştiricinin takımlar halinde çalışması ve birlikte geliştirme yapmasıdır. Süreç olarak düşündüğünüzde, diğer bir soruna çözüm, tam bu noktada geliyor. Birden fazla kişinin yazılım geliştirmesine olanak sağlayan yapılar!

Linus Torvalds

Peki bu süreci ilk kim düşünmüş derseniz aslında bir çok yazılım geliştirici bu süreçte bu durumu kontrol edebilmek adına birçok ücretli farklı uygulama geliştirmişler ve kullanıyorlardı. Bu süreci daha sağlıklı hale getirmek isteyen, Linux’u geliştiren topluluğun (özellikle Linux’un yaratıcısı olan Linus Torvalds’ın ) Bitkeeper’i kullanırken edindiği deneyimler üzerinden, kendi dağıtık versiyon kontrol sistemini geliştirmek istemesine sebep oldu. Ve 2005 yılında Git hayata gözlerini açtı. Hız ,minimal tasarım, lineer olmayan geliştirme için güçlü destek (binlerce paralel dal desteği), tamamen dağıtık olması, devasa projeleri Linux kernel’i verimliliğinde destekleyebilmesi (hız ve veri büyüklüğü açısından) diğer kontrol sistemlerinin önüne geçmesini sağladı. Tabi ki hala birçok farklı git alternatifi mevcuttur. Bunlarından bazılarını söylemem gerekirse Azure DevOps Server, Helix Core, SourceForge, AWS CodeCommit, Subversion, Rational ClearCase, Mercurial, Micro Focus AccuRev olarak özetleyebilirim. Alternatifleri çok olsa da, git en çok kullanılan kaynak kod yönetim uygulamasıdır.

Git versiyon kontrolü aslında işaretlediğimiz projeleri git veri tabanına ekler ve daha sonrasında eklenilen projelerde save point denilen noktalara ulaşılmasını sağlar. Daha öncesinde oluşturduğumuz ya da var olan bir projeyi ilk olarak “Staged” komutuyla işaretliyoruz. Bu bir sonraki commit’ i anlık görünümünde işlenecek şekilde işaretlediğinizi gösterir. Daha sonrasında projeyi commit ederek veri tabanına ekliyoruz.

Proje commit edildiğinde yani veri tabanına eklendiğinde projeyi bize özgü yapmak ve güvenliğini doğru şekilde sağlamak adına, SHA1 şifreleme algoritmasıyla “882e248db5b4e3e507e3c9226fed20c89a2decf1” buna benzer bir şifre üreterek, eklenen dosyanın sağlamasını yapar ve şifreyle projeyi eşler. Bu süreçte aktif olarak projenin kendisini değil, bu özet değerlerini kullanır. Hatta Git, sunucusundaki her şeyi dosya isimleriyle değil, içeriklerinin özet (şifre) değeriyle saklar.

Şimdi bahsedeceğim kısım ise branch ve merge işlemleri ön planda olacak. Kısaca bir ekibin tek projede nasıl çalışabileceğinden bahsetmiştim. Bu kısımda bu sürecin biraz daha detaylarına inmek istiyorum.

İlk anlam olarak dal anlamına gelen bu yapı projenin dallanmasından dolayı seçilmiş. Merge ise birleştirmek anlamına geldiğinden ötürü kullanılıyor. Şimdi bunların anlamlarına detaylıca göz atalım.

Bir projemiz olsun. Bu projenin veri tabanı kısmı halledilmiş ve önyüzü tasarlanmış olsun. Eklemek istediğimiz iki özellik olduğunu düşünelim. Hem bir mesajlaşma fonksiyonu hem de resim paylaşma fonksiyonu yazmak istiyoruz. Tam bu noktada yukarıda gördüğünüz resimdeki kırmızı yapılar resim ekleme fonksiyonu olsun. Sürece devam eden projede ise mesajlaşma fonksiyonu yazıldığını varsayalım. En son adıma kadar farklı iki projeymiş gibi ilerleyen süreç, en son kısımda tek projede birleşiyor. Böylece bütün süreçte birden çok kişi yer alabiliyor. Bu kısımda kırmızı ve mavi olarak ilk yol ayrımına “Branch” işlemi diyoruz. En son kısımda ise projenin birleştirilmesi “Merge” işlemi olarak adlandırılmaktadır.

Git çalışma mantığını kısaca böyle özetleyebilirim. Peki ya Github nedir?

Github ise projelerimizin saklandığı (depolandığı) uzak sunucudur. Github’a projelerinizi ekleyebilir aynı zamanda istediğiniz public olan farklı projelere Github üzerinden erişerek projeyi bilgisayarınıza indirebilirsiniz. Hatta istediğinizde bu projeler üzerinde değişiklikler yaparak Pull Request gönderebilirsiniz.

REFERANSLAR

--

--