tr | en
9
Oca
2017
Git'in Temelleri
Kategori: 


Fark değil, Anlık Kopya

Git'in diğer SDS'lerden (CVS, Subversion, Perforce, Bazaar, vb.) en önemli farkı veriye bakışı ile ilgilidir. Diğer sistemlerin tamamına yakını yönettiği dosyaların ilk halini ve zaman içerisindeki değişikliklerin bilgisini veritabanında tutarlar.

 

Oysa Git verisini bu şekilde saklamaz. Git her sürüm için o andaki dosyayı olduğu gibi kaydeder. Yönettiği dosyaları bir tür mini dosya sistemi anlık kopyası (snapshot) gibi değerlendirir. Projenin her durum kaydı işlemin (commit) sonrasında, Git gerçekte proje dosyalarının o andaki durumunun bir fotoğrafını çeker ve bu anlık kopyaya bir referans kaydı yaratır.

 

Git'i hemen hemen diğer tüm SDS'lerden ayıran en önemli özellik budur. Böylelikle, Git gerçekte her proje durumu için bir mini dosya sistemi gibi davranır.

Hemen Tüm İşlemler Yerelde Yapılır

Git'te yapılan hemen tüm işlemler için sadece yerel dosyalar ve kaynaklar kullanılır - genellikle diğer sistemlerden hiçbir bilgi kullanması gerekmez. Bu özelliği sayesinde diğer SDS'lerde ciddi ağ gecikmeleri yaşanırken, Git sadece yerel veriyi kullandığı için diğer benzeri sistemlere kıyasla hızı hemen farkedilir. Projeye ait tüm veri (geçmiş sürümleri ile birlikte) yerelde kayıtlı olduğu için hemen tüm işlemler anlık gerçekleşir.

Örneğin, projenin tarihçesini taramak için Git bir sunucuya bağlanıp oradan tarihçeyi indirdikten sonra görüntülemekle uğraşmaz —yerel veritabanını okumak yeterlidir. Bu da proje terihçesini neredeyse anında görünteleyebilmeniz anlamına gelir. Bir dosyanın şimdiki haliyle bir ay önceki hali arasındaki farkları görmek isterseniz, Git, bir sunucudan fark hesaplaması yapmasını talep etmek ya da karşılaştırmayı yerelde yapabilmek için dosyanın bir ay önceki halini indirmek zorunda kalmak yerine, dosyanın bir ay önceki halini yerelde bulup fark hesaplamasını yerelde yapar.

Bu aynı zamanda, eğer bağlantınız kopmuşsa, ya da VPN bağlantını yoksa yapamayacağınız şeylerin de sayıca oldukça sınırlı olduğu anlamına geliyor.

Git Veri Bütünlüğünü Sağlar

Git'te her şey depolanmadan önce sağlama toplamından geçirilir (checksum) ve daha sonra veriye bu sağlama toplamı üzerinden erişilir. Diğer bir deyişle Git veri üzerinde yapılan tüm değişikliklerden haberdardır. Herhangi bir nedenle veritabanında bir değişiklik olmuşsa Git bunu mutlaka algılayacaktır.

Git ssağlama işlemi için SHA-1 özeti kullanır. Bu, on altılı sayı sisteminin (hexadecimal) sembolleriyle gösterilen (0-9 ve A-F) ve dosya ve klasör düzenini temel alan bir hesaplamayla elde denilen 40 karakterlik bir karakter dizisidir. Bir SHA-1 özeti şuna benzer:

24b9da6552252987aa493b52f8696cd6d3b00373

Git herşeyi dosya adı ile değil de içeriğin SHA-1 özeti üzerinden erişebilecek şekilde veritabanında saklar.

Git Genellikle Yalnızca Veri Ekler

Git'te yapılanu işlemlerin neredeyse tamamı Git veritabanına veri ekler. Sistemin geri döndürülemez bir şey yapmasını ya da veri silmesini sağlamak çok zordur. Her SDS'de olduğu gibi henüz kaydetmediğiniz değişiklikleri kaybedebilir ya da bozabilirsiniz; ama Git'e bir bellek kopyasını kaydettikten sonra veri kaybetmek çok zordur, özellikle de veritabanınızı düzenli olarak başka bir yazılım havuzuna itiyorsanız (push).

Bu şekilde, işleri sıkıntıya sokmadan denemeler yapabilme yetisi çalışmayı keyifli kılar.

Üç Durum

Git'te, dosyalarınızın içinde bulunabileceği üç durum (state) vardır: kaydedilmiş, değiştirilmiş ve hazırlanmış. Kaydedilmiş, verinin güvenli biçimde veritabanında depolanmış olduğu anlamına gelir. Değiştirilmiş, dosyayı değiştirmiş olduğunuz fakat henüz veritabanına kaydetmediğiniz anlamına gelir. Hazırlanmış ise, değiştirilmiş bir dosyayı bir sonraki kayıt işleminde bellek kopyasına alınmak üzere işaretlediğiniz anlamına gelir.

 

Git klasörü, Git'in üstverileri (metadata) ve nesne veritabanı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ış veritabanından çıkartılıp kullanımınız için sabit diske yerleştirilir.

Hazırlık alanı (staging area), genellikle Git klasöründe bulunan ve bir sonraki kayıt işleminin hangi değişiklikleri kapsadığının tutulduğu basit bir dosyadır.

Git işleyişi temelde şöyledir:

  • Çalışma klasöründeki dosyalar üzerinde değişiklik yapılması.
  • Dosyaların bellek kopyalarının hazırlık alanına eklenmesi.
  • Dosyaların hazırlık alanındaki hallerini alıp oradaki bellek kopyasını kalıcı olarak Git klasörüne depolanmak üzere kaydedilmesi.

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.