DEV Community

Ebrar Bozkurt
Ebrar Bozkurt

Posted on

Git ve Git'in Tarihçesi

Git; projenin dosyalarında yapılabilecek her türlü değişikliği yönetmeye, düzenlemeye ve kaydetmeye geniş ve güvenli bir sistem üzerinden olanak sağlayan açık kaynaklı, dağıtılmış bir sürüm kontrol sistemidir. Başta yazılım geliştirmek olmak üzere birçok belge veya dosyanın düzenlenip geliştirilmesinde kullanılır. Bunlara daha sonra da değineceğiz.

Peki sürüm kontrol sistemi nedir? Sürüm kontrol sistemleri, içeriği ve birbirleriyle ilişkisi sürekli değiştirilen birden fazla belgenin zaman içerisindeki durumlarının idaresini konu edinen yaklaşım ve bilgisayar ortamındaki belge kümelerinin bu yaklaşımla değişiklik yönetimi işlemlerini kolaylaştıran yazılımlardır. Projelerin geçmiş durumlarını geri getirmek, zaman içerisinde yapılan değişiklikleri karşılaştırmak, probleme neden olabilecek değişikliklerin en son kimin tarafından yapıldığını görmek gibi birçok işlevi vardır.

Daha sonra bu sistemin hata yapmaya çok açık olduğu fark edilmiştir. Örneğin hangi dizinde bulunduğunu unutmak, yanlışlıkla yanlış dosya üzerine yazmak veya istemediğiniz dosyaların üzerine yazmak vs. Bu sebeple günümüzde de kullanımı sürdürülen yerel kontrol sistemi oluşturuldu. Yerel kontrol sistemlerinin en popüleri olan RCS, yama setlerini (dosyalar arasındaki farklılıklar) disk üzerinde özel bir formatta tutarak çalışır; daha sonra tüm yamaları bir araya getirerek herhangi bir zamanda herhangi bir dosyanın nasıl göründüğüne bakarak onu yeniden oluşturur. Bu avantajlarının yanında geliştiricilerin diğer geliştiricilerle iş birliği yapma zorunluluğunda olma gibi dezavantajları da vardı. Bunun sonucunda da merkezi sürüm denetim sistemleri geliştirildi.

Bu sistemler bütün sürümlendirilmiş dosyaları barındıran tek bir sunucuya ve o sunucudaki dosyaları tek merkezden sürekli denetleyen istemcilere sahipti. Yerel kontrol sistemine göre kullanıcıların diğerlerinin projesine erişimi sınırlanmıştı. Ancak merkezi sunucuların tek noktaya bağlı olması önemli bir sorundu. Çünkü sunucu çöktüğünde kullanıcıların üstünde çalıştıkları projelerde sürüm değişiklikleri kaydedilmezdi veya veritabanındaki harici disk bozulunca düzgün yedekleme yapılmamışsa kullanıcıların kendi yerel makinelerinde tuttukları anlık durum dışında projenin tüm tarihini ve dosyalarını, yani her şeyi kaybedebilirdi.

Bahsi geçen sorunların çözümü için ise dağıtık sürüm sistemleri geliştirildi. Dağıtık sürüm sistemlerinde istemciler sadece dosyaların son anlık görünümünü denetlemeyip repoyu reponun tam tarihiyle birlikte yansıtırlar. Dolayısıyla herhangi bir sunucu devre dışı kalınca, o sunucu aracılığıyla iş birliği yapan sistemlerdeki herhangi bir istemci reposu sunucuyu yenilemek için geri yüklenebilirdi. Ayrıca bu sistemde farklı gruplardan insanlarla eş zamanlı bir şekilde iş birliği yapmak mümkündür.

1991 ve 2002 yılları arasında, Linux çekirdeğinin bakım süresinin büyük bir kısmında, yapılan değişiklikler; yamalar ve arşivlenmiş dosyalarla aktarıldı. 2002 yılında Linux kernel projesi tescilli bir dağıtık sürüm denetim sistemi olan Bitkeeper’i kullanmaya başladı. 2005 yılında Linux çekirdeğini geliştiren toplulukla Bitkeeper’i geliştirmiş olan ticari şirket arasındaki ilişkiler koptu ve o zamana kadar ücretsiz olan Bitkeeper’in dağıtık sürüm denetim sistemi artık ücretli hale geldi. Böylece Git'in kurulumunun temelleri atılmıştı.

 Linux çekirdeğinin geliştiricisi ve proje yöneticisi olam  Linus Torvalds, BitKeeper uygulamasında olduğu gibi dağıtık çalışan bir sürüm kontrol sistemi istiyordu ancak piyasadaki mevcut özgür sistemlerin hiçbiri özellikle performans konusunda Torvalds'ın beklentilerini karşılamıyordu. Torvalds bu konuyu piyasadaki mevcut sürüm kontrol sistemlerini ele alarak örneklemişti; bir yamanın uygulanarak ilgili tüm veri yapılarının güncellenmesinin 30 saniye sürmesi ve tüm bu değişikliklerin ilgili diğer geliştiricilere iletilebilmesi için aynı işlemin 250 defa tekrarlanmasının Linux çekirdeğinin geliştirilmesi yönünde engel teşkil ettiğinin altını çiziyordu. Torvalds'ın hedefi bu süreyi üç saniyeye düşürmekti.

Bunun yanında Torvalds'ın başka kriterleri de vardı. Örneğin sistemin ağ üzerinde dağınık çalışmaya izin veren iş akışını desteklemesi, zararlı kodlar veya yanlış kullanım nedeniyle veri kaybını önleyecek sıkı güvenlik yapılarına sahip olması, ne yapılmaması gerektiği konusunda CVS örneği ele alınıp kararsız kalınırsa CVS'in sunduğu çözümün tam tersini yapması. Bu kriterleri, Monotone dışında o gün piyasada var olan hiçbir sürüm kontrol sistemi yerine getiremiyordu, performans söz konusu olduğunda ise Monotone da eleniyordu. Böylece 2.6.12-rc2 sürümlü linux çekirdeğinin yayınlanmasının hemen ardından Torvalds, kendi sürüm kontrol sistemini yazmaya karar verdi.

Geliştirilecek yeni sistemin saydığımız kriterlere ek olarak hızlı, minimal tasarımlı, doğrusal olmayan geliştirme için binlerce paralel dal desteği olması, tamaen dağıtık olması ve devasa projeleri Linux çekirdeğinin verimliliğinde destekleyebilmesi amaçlanmıştır. 2005 yılında ortaya çıkmasından beri Git, kullanımı kolay olacak şekilde hem evrilip hem de olgunlaşmasına rağmen, ilk baştaki hedeflerini ve özelliklerini koruyabilmiştir.

Torvalds'ın Git üzerinde çalışmaya 3 Nisan 2005 civarlarında başladığı düşünülmektedir. Projeyi 6 Nisan'da Linux Kernel e-posta listesinde duyurdu. Ertesi gün, 7 Nisan'da Git kendi kendini barındırır (self-hosting) hale geldi. Torvalds 2007'de Git e-posta listesine yazdığı bir mesajda bu tarihleri doğrulamış ve yaklaşık iki haftalık bir hedefe sahip olduğunu belirtmiştir. 16 Haziran'da çekirdek 2.6.12 sürümünün yönetimi Git ile yapılmaya başlandı. 26 Temmuz 2005'te Torvalds, bakım sorumluluğunu projenin önemli katkıcılarından Junio Hamano'ya devretti; Hamano da 21 Aralık 2005'te 1.0 sürümünü yayımladı.

Biraz da Git'in ne olduğundan, kullanım amaçlarından bahsedelim. Git'in temel amacı, bir projenin dosyalarında yapılan tüm değişikliklerin açık ve ayrıntılı bir kaydını tutmak ve aynı zamanda birden fazla kişinin aynı dosyalar üzerinde çalışmalarını koordine etmesini sağlamaktır. Dağıtılmış felsefesi ve esnekliği sayesinde Git, aynı dosyanın önceki bir sürümüne geri dönme olanağı ile halihazırda olan herhangi bir şeyi bozma korkusu olmadan denemeler yapma olanağı sağlamıştır. Git’in kullanıcı arayüzünün diğer Sürüm Denetim Sistemleri’ne olan benzerliği oldukça fazla olsa da Git, bilgileri diğerlerinden çok daha farklı bir şekilde depolar ve bu bilgiler hakkında daha farklı düşünür.

Diğer çoğu sistem bilgileri dosya setleri ve o dosyalara zaman içinde yapılan değişiklikler şeklinde saklarken Git, verilerini daha çok minyatür dosya sistemlerinin anlık görüntüler serisi şeklinde düşünür ve o şekilde saklar. Her katkı işlediğinizde ya da projenizin durumunu kaydettiğinizde, tüm dosyalarınızın o an nasıl göründüğünün fotoğrafını çeker ve o anlık görünümün referansını saklar. Eğer dosyalar değişmemişse o dosyaları tekrar saklamaz, onun yerine o dosyaların halihazırda saklandığı referansa bağlantı verir. Böylelikle Git basit bir VCS’dense, güçlü araçlarla donatılmış minyatür bir dosya sistemi olmuştur.

Ayrıca Git’deki çoğu işlem çalışmak için yalnızca yerel dosyalara ve kaynaklara ihtiyaç duyar. Genel olarak başka bir bilgisayardan sizin ağınıza bilgi gelmesine ihtiyacınız yoktur. Yani projenizin tüm tarihçesi tam olarak yerel diskinizdedir, ve çoğu işlem de neredeyse anında gerçekleşir.

Biraz da Git ve GitHub arasındaki farka değinelim. Git ve GitHub sıklıkla birlikte kullanılsalar da aslında farklı amaçlara hizmet ederler. Git, projelerde yapılan değişiklikleri takip etmeyi ve farklı sürümleri yönetmeyi sağlayan bir sürüm kontrol sistemidir. GitHub ise Git kullanılarak oluşturulan projelerin internet üzerinde saklanmasına, paylaşılmasına ve başkalarıyla birlikte geliştirilmesine olanak tanıyan bir platformdur. Git, bilgisayarda internet bağlantısı olmadan da kullanılabilirken GitHub'ın sunduğu çevrim içi özelliklerden yararlanmak için genellikle internet bağlantısı gerekir. Geliştiriciler Git sayesinde projelerindeki değişiklikleri yönetirken GitHub aracılığıyla projelerini başkalarına açabilir ve ekip arkadaşlarıyla iş birliği yapabilirler. Bu iki aracın birlikte kullanılması, modern yazılım geliştirme süreçlerini daha düzenli ve verimli hâle getirir.

Sonuç olarak Git, ortaya çıktığı günden bu yana yazılım geliştirme süreçlerinin önemli bir parçası hâline gelmiştir. Geliştiricilerin projelerini düzenli bir şekilde takip etmelerine, geçmiş değişikliklere dönmelerine ve ekip hâlinde daha verimli çalışmalarına olanak tanır. Dağıtık yapısı sayesinde internet bağlantısına ihtiyaç duymadan birçok işlemin gerçekleştirilebilmesi de Git'i kullanışlı bir araç hâline getirir. Özellikle GitHub gibi platformlarla birlikte kullanıldığında, yazılım projelerinin paylaşılması ve ortak çalışmaların yürütülmesi çok daha kolay olur. Günümüzde yalnızca profesyonel yazılım geliştiriciler değil, programlamayı yeni öğrenen kişiler de Git'ten yararlanmaktadır. Git'in gelişimi, yazılım dünyasında değişiklikleri güvenli ve düzenli bir şekilde yönetme ihtiyacının ne kadar önemli olduğunu göstermektedir.

Top comments (0)