Git
Chapters ▾ 2nd Edition

1.1 Başlangıç - Sürüm Denetimi

Bu bölümde Git kullanımı hakkında temel bilgileri bulacaksınız. İşe, sürüm kontrol sistemleri hakkında açıklamalarla başlayacağız; daha sonra Git kurulumunun nasıl yapılacağını, en son olarak da aracın yapılandırma ve kullanımını açıklayacağız. Bu bölümün sonunda Git’in neden var olduğunu ve neden onu kullanmanız gerektiğini anlayacak, Git’i kullanmaya başlamak için kurulumu tamamlamış olacaksınız.

Sürüm Denetimi

Sürüm Denetimi nedir ve neden önemsenmelidir? Sürüm denetimi, belirli sürümlerin daha sonra çağrılabilmesi için zaman içerisinde bir dosya veya dosya grubundaki değişiklikleri kaydeden bir sistemdir. Örneğin bu kitapta, sürüm denetimi için yazılım kodları kullanılacaktır fakat sürüm denetimi bilgisayardaki herhangi bir dosya türü için de kullanılabilir.

Eğer grafik ya da ağ tasarımcı iseniz ve çalıştığınız görüntü ya da tasarımların her bir değişikliklerini tutmak istiyorsanız (ki bu gerçekten istebilecek bir şeydir), Sürüm Denetim Sistemi (VCS: Version Control System) akıllıca bir seçim olacaktır. Sürüm Denetim Sistemi, seçili dosyaların bir önceki sürüme (bir önceki duruma) döndürülmesi, projenin tamamının bir önceki sürüme döndürülmesi, zaman içerisinde yapılan değişikliklerin karşılaştırılması, probleme neden olabilecek değişikliklerin en son kimin tarafından yapıldığı, kim bir problemden ne zaman bahsetti gibi bir çok işlemin gerçekleştirilebilmesini sağlar. Genel olarak VKS kullanmak, değişiklik yaptığınız dosyalar üzerinde bir şeyleri berbat ettiğinizde ya da bir şeyleri kaybettiğinizde kolayca geri getirebilmeniz anlamına gelmektedir. Ayrıca VKS’nin tüm bu özelliklerini çok az bir iş yüküyle elde edersiniz.

Yerel Sürüm Denetim Sistemleri

Çoğu insanın sürüm denetim yöntemi, ilgili dosyaları başka bir yere kopyalamaktır (Muhtemelen daha zeki olanları, klasör isimlendirmesinde zaman damgası kullanıyordur). Bu yaklaşım basit olduğundan çok yaygındır fakat aynı zamanda inanılmaz derecede hataya açık bir yaklaşımdır. Hangi dizinde bulunduğunuzu unutmak, yanlışlıkla yanlış dosya üzerine yazmak veya istemediğiniz dosyaların üzerine yazmak gibi ihtimallerin gerçekleşmesi çok olasıdır.

Tüm bu sorunlardan ötürü, uzun zaman önce geliştiriciler, yapılan tüm değişiklikleri gözden geçirilebilir parçalar halinde basit veritabanı üzerinde tutan yerel sürüm denetim sistemlerini geliştirdiler.

Yerel sürüm denetim şeması
Görsel 1. Yerel sürüm denetimi.

En popüler VCS araçları RCS adında bir sistemdi, ki kendisi bugün bile hâlâ pek çok bilgisayarda kullanılır. 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şturabilir.

Merkezî Sürüm Denetim Sistemleri

İnsanların karşılaştığı bir diğer büyük problemse diğer sistemlerdeki geliştiricilerle iş birliği yapmak zorunda kalmalarıydı. Bu problemin çözümü olarak Merkezî Sürüm Denetim Sistemleri (CVCS: Central VCS) geliştirildi. Bu sistemler (CVS, Subversion ve Perforce gibi) bütün sürümlendirilmiş dosyaları barındıran tek bir sunucuya ve o sunucudaki dosyaları tek merkezden sürekli denetleyen istemcilere sahipti. Uzun yıllar boyunca bu sistem, sürüm denetim sistemleri için standart oldu.

Merkezî sürüm denetim şeması
Görsel 2. Merkezî Sürüm Denetimi.

Bu kurulum yerel VCS’lere kıyasla pek çok avantaj sunar. Örneğin, projedeki herkes diğer herkesin projede ne yaptığını belli bir ölçüye kadar bilebilir. Yöneticiler, kimin ne yapabileceği konusunda hassas bir kontrole sahiptir ve bir CVCS’yi yönetmek her istemcideki yerel veritabanlarıyla uğraşmaktan çok daha kolaydır.

Bununla birlikte bu kurulumun ciddi dezavantajları da vardır. En bariz olanı merkezi sunucuların tek bir noktaya bağlı olmasıdır. Eğer o sunucu bir saatliğine çökerse, çöktüğü andan itibaren hiç kimse hiç iş birliği yapamaz veya üzerinde çalışmakta oldukları herhangi bir şeye sürüm değişikliklerini kaydedemezler. Eğer sunucu veritabanındaki harici disk bozulursa ve 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 kaybedersiniz. Yerel VKS’ler de aynı sorundan muzdariptir, projenin tüm tarihini ve dosyalarını tek bir yerde tuttuğunuz sürece, her şeyi kaybetme riskiniz vardır.

Dağıtık Sürüm Denetim Sistemleri

İşte tam da burada devreye Dağıtık Sürüm Denetim Sistemleri (DVCS: Distributed VCS) giriyor. Bir DVCS’de (Git, Mercurial, Bazaar ya da Darcs gibi) istemciler sadece dosyaların son anlık görünümünü denetlemezler, daha çok repoyu reponun tam tarihiyle birlikte yansıtırlar. Dolayısıyla eğer herhangi bir sunucu devre dışı kalırsa, birbiriyle o sunucu aracılığıyla iş birliği yapan sistemlerdeki herhangi bir istemci reposu sunucuyu yenilemek için geri yüklenebilir. Her klon, en nihayetinde tüm verilerin tam bir yedeğidir aslında.

Dağıtık sürüm denetim şeması
Görsel 3. Dağıtık sürüm denetimi.

Ayrıca bu sistemlerin çoğu birden çok uzak repoyla çalışmayı rahatlıkla kaldırabilir, o yüzden farklı gruplardan insanlarla farklı yollarla eş zamanlı bir şekilde rahatlıkla iş birliği yapabilirsiniz. Bu da size hiyerarşik model gibi merkezi sistemlerde yapması mümkün olmayan birden çok iş akışı şekli tanımlama ve kullanma olanağı sağlar.

scroll-to-top