Git
Chapters ▾ 2nd Edition

1.1 Başlangıç - Versiyon Kontrol

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.

Versiyon Kontrol

Versiyon kontrol nedir ve neden önemsenmelidir? Versiyon kontrol, belirli versiyonların 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, versiyon kontrol için yazılım kodları kullanılacaktır fakat versiyon kontrol bilgisayardaki herhangi bir dosya türü için de kullanılabilir.

Eğer grafik ya da web 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), Versiyon Kontrol Sistemi (VKS) akıllıca bir seçim olacaktır. Versiyon Kontrol Sistemi, seçili dosyaların bir önceki versiyona (bir önceki değişiklik yapılmış duruma) döndürülmesi, projenin tamamının bir önceki versiyona 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 Versiyon Kontrol Sistemleri

Çoğu insanın versiyon kontrol metodu, 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 versiyon kontrol sistemlerini geliştirdiler.

Yerel versiyon kontrol şeması
Figure 1. Yerel versiyon kontrol.

En popüler VKS 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î Versiyon Kontrol 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î Versiyon Kontrol Sistemleri (MVKS) 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ı merkezî bir yerden sürekli denetleyen istemcilere sahipti. Uzun yıllar boyunca bu sistem, versiyon kontrol sistemleri için standart oldu.

Merkezî versiyon kontrol şeması
Figure 2. Merkezî versiyon kontrol.

Bu kurulum yerel VKS’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 MVKS’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 Versiyon Kontrol Sistemleri

İşte tam da burada devreye Dağıtık Versiyon Kontrol Sistemleri (DVKS) giriyor. Bir DVKS’de (Git, Mercurial, Bazaar ya da Darcs gibi) istemciler sadece dosyaların son anlık görünümünü denetlemezler, daha çok depoyu deponun 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 deposu sunucuyu yenilemek için geri yüklenebilir. Her klon, en nihayetinde tüm verilerin tam bir yedeğidir aslında.

Dağıtık versiyon kontrol şeması
Figure 3. Dağıtık versiyon kontrol.

Ayrıca bu sistemlerin çoğu birden çok uzak depoyla ç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.