Oğlum, Bak ‘Git’!

Oğlum Bak Git!

Git konusuna giriş yapmadan önce Sürüm Denetim Düzeni (Version Control System – VCS) başlıklı yazımı okumanızı tavsiye ederim.

Git; Linux’un yaratıcısı olan Linus Torvalds abimiz ve diğer açık-kaynak geliştiricileri tarafından geliştirilmiş ve halen geliştirilmekte olan, dağıtık türde çalışan bir Sürüm Denetim Düzeni (VCS) ve Kaynak Kod Denetim Düzeni (SCCS) aracıdır.

Git & Linus Torvalds

Sanırım yukarıdaki cümle oldukça teorik oldu. Tamam, bu işin çaresine bir şekilde bakacağız artık. Ama günümüzde her şey o kadar hızlı gelişiyor ki teknolojileri tek bir cümlede tanımlamak bazenleri zor olabiliyor. Bu yazının başında verdiğim bağlantıda, VCS’nin ne olduğunu ve ne işe yaradığını az çok öğrenmiştik. İşte Git de VCS çeşididir. Yalnız Git, geliştirilirken hem kendisinden önceki VCS ürünlerinden ilham aldı, hem de onların üzerine artı olarak bir çok özellik getirdi. Üstelik şuan Git ile uyumlu çalışmayan IDE sayısı, yok denecek kadar az.

Git’in ortaya çıkış hikayesi aslında biraz değişik. Linus abimiz ve geliştirme ekibi, Linux’u 2002 yılına kadar yamalar ve arşiv dosyaları ile saklamakta idi. (Kulağa garip geliyor ama öyle.) Sürüm yönetimi için 2002 yılından itibaren BitKeeper adlı bir Dağıtık Sürüm Denetim Düzeni kullanmaya başladılar. Ta ki Andrew Tridgell adındaki bir şahsın, bir takım tersine-mühendislik yöntemleriyle BitKeeper kurcalayıp, protokolüne müdahalelerde bulunana kadar. Tabi bu duruma sinirlenen BitKeeper’ın gelişticisi olan Larry McVoy, eline bir satır alarak, bir çok açık-kaynak geliştiricisini kesti, biçti. (Ücretsiz lisanslarını iptal etti.) Bu olay, Linus abimizi ve Linux geliştirme topluluğunu, kendi araçlarını geliştirme konusunda kamçıladı. Yani Git! Yeni aracı geliştirilirken; hız, basitlik, çoklu geliştirim (branch), tamamen dağıtık düzen ve büyük projeler için kararlılık gibi amaçlar göz önüne alındı. Ancak hız ve verimlilik en öncelikli amaçlar idi. Git, aslen C dilinde geliştirildi.

Git’in Özellikleri

# Aynısını kopyalamaz, işaret eder: Git verilerini bir dizi değişiklik olarak değil, bir dizi bellek kopyası olarak depolar. Verimli olabilmek için, değişmeyen dosyaları yeniden depolamaz.

# Neredeyse her işlem yerelde: Git’te gerçekleştirdiğiniz çoğu işlem, yerel dosyalar üzerinde yapılır. Uzak bir bilgisayara gerek duyulmadığı için hız konusunda bir Çita kadar iyidir! Ayrıca bu özellik sayesinde; dağda, bayırda, yolculukta, tatilde hiçbir bağlantıya ihtiyaç duymadan, proje üzerinde istediğiniz gibi çalışmanızı sağlar.

Git & Speed

# Git bütünlüklüdür: Git, içerikleri depolamadan önce bir sınama toplamından (checksum) geçirir. Bu sınama işlemi SHA-1 mekanizması ile gerçekleştirilir. Bir SHA-1 özeti, on altılık sayıdan (hexadecimal) ibarettir:

24b9da6552252987aa493b52f8696cd6d3b00373

Git, bu sayede herhangi bir dosya üzerinde el ile değiştirmenin önüne geçmiş olur.

# Git genellikle sadece veri ekler: Git üzerinde yaptığınız işlemlerin neredeyse tamamı, veri tabanına yazılır. Yeni denemeler yapar iken elinizdeki mevcut verilerin ağzına edebilirsiniz. Ancak Git’te verinin bir kez bellek kopyası oluşturulduğunda, o veriyi kaybetmek imkansız gibi bir şeydir. O yüzden gönül rahatlığıyla proje üzerinde değişiklikler, denemeler yapabilirsiniz…

# Üç Aşama: Git üzerinde çalışan dosyaların üç farklı durumu vardır:
1. Kaydedilmiş Durum: Verinin güvenli bir biçimde veri tabanında saklanmaş halidir.
2. Değiştirilmiş Durum: Verinin değiştirilmiş ancak henüz veri tabanına kaydedilmemiş halidir.
3. Hazırlanılmış Durum: Değiştirilmiş verinin, bir sonraki kayıt işleminde, bellek kopyası alınmak üzere işaretlenmiş halidir.
Böylelikle; Çalışma Klasörü, Hazırlık Alanı ve Git Klasörü olmak üzere Git’in üç ana çalışma bölümü oluşmuş oluyor.

Git Local Operations

Git Klasörü: Git’in üstverileri (metadata) ve nesne veri tabanını depoladığı yerdir. Bu, Git’in en önemli parçasıdır ve bir yazılım havuzunu bir bilgisayardan bir başkasına klonladığınızda kopyalanan şeydir.

Çalışma Klasörü: Projenin bir sürümünden yapılan tek bir seçmedir. Bu dosyalar, Git klasöründeki sıkıştırılmış veri tabanından çıkartılıp sizin kullanımınız için sabit diske yerleştirilir.

Hazırlık Alanı (Staging Area): Genellikle Git klasörünüzde bulunan ve bir sonraki kayıt işlemine hangi değişikliklerin dahil olacağını tutan sade bir dosyadır. Buna bazen indeks dendiği de olur. Ama hazırlık alanı ifadesi giderek daha standart hale geliyor.

Git işleyişi temelde şöyledir:

  1. Çalışma klasörünüzdeki dosyalar üzerinde değişiklik yaparsınız.
  2. Dosyaları bellek kopyalarını hazırlık alanına ekleyerek hazırlarsınız.
  3. Dosyaların hazırlık alanındaki hallerini alıp oradaki bellek kopyasını kalıcı olarak Git klasörüne depolayan bir kayıt işlemi yaparsınız.

Bir dosyanın belirli bir sürümü Git klasöründeyse, onun kaydedilmiş olduğu kabul edilir. Eğer üzerinde değişiklik yapılmış fakat hazırlık alanına eklenmişse, hazırlanmış olduğu söylenir. Ve seçme işleminden sonra üzerinde değişiklik yapılmış fakat kayıt için hazırlanmamışsa, değiştirilmiş olarak nitelenir.

# Ücretsiz ve Açık-Kaynak: Git, bir açık-kaynak lisansı olan GNU General Public License 2.0 sürümü ile lisanslanmıştır. Özgürsün, daha ne diyeyim işte!

Git’in Kurulumu

# Linux’ta Kurulum
Fedora Linux işletim sisteminde:
$ apt-get install git
Ubuntu gibi Debian-tabanlı Linux işletim sistemlerinde:
$ yum install git-core

# Mac OS’ta Kurulum
GUI ile kurmak için:
http://sourceforge.net/projects/git-osx-installer/
Komut satırından MacPorts‘un desteği ile kurmak için:
$ sudo port install git-core +svn +doc +bash_completion +gitweb

# Windows’da Kurulum
GUI ile kurmak için:
http://msysgit.github.com/

Geldik bir yazının daha sonuna! Başınızı ağrıttıysam, sürç-i lisan ettiysem affola…

Bu yazının gelişmesini istiyorsanız ya da bu yazıda eksik/hatalı bir yer görüyorsanız, aşağıya yorum olarak bildirebilir ya da yararman@gmail.com adresine e-posta gönderebilirsiniz.

Kaynaklar :

  • https://git-scm.com/book/tr/v1/Ba%C5%9Flang%C4%B1%C3%A7-Git-in-K%C4%B1sa-Bir-Tarih%C3%A7esi
  • https://git-scm.com/book/tr/v1/Ba%C5%9Flang%C4%B1%C3%A7-Git-in-Temelleri
  • https://git-scm.com/book/tr/v1/Ba%C5%9Flang%C4%B1%C3%A7-Git-in-Kurulumu